/**
 * Copyright 2019-2020 Huawei Technologies Co., Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <gtest/gtest.h>
#include <ctime>

#include "common/formats/format_transfers/format_transfer_fractal_zz.h"

#include "common/formats/format_transfers/format_transfer.h"
#include "common/formats/formats.h"
#include "common/fp16_t.h"
#include "time.h"

namespace ge {
namespace formats {
class UtestFormatTransferNdFractZz : public testing::Test {
 protected:
  void SetUp() {}
  void TearDown() {}
};

TEST_F(UtestFormatTransferNdFractZz, nd_shape1_uint8_1) {
  uint8_t data[1] = {
      176,
  };
  uint8_t ret[1 * 1 * 32 * 32] = {
      176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1}, {1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 32, 32}, {1}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape1_uint8_2) {
  uint8_t data[32] = {
      6,   252, 167, 37, 140, 227, 115, 64,  179, 18,  63,  134, 23,  184, 175, 128,
      233, 103, 57,  50, 191, 16,  128, 175, 138, 239, 243, 13,  170, 126, 186, 84,
  };
  uint8_t ret[1 * 1 * 32 * 32] = {
      6,   252, 167, 37, 140, 227, 115, 64, 179, 18, 63, 134, 23, 184, 175, 128, 233, 103, 57, 50, 191, 16, 128, 175,
      138, 239, 243, 13, 170, 126, 186, 84, 0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,   0,   0,   0,  0,  0,   0,  0,   0,
      0,   0,   0,   0,  0,   0,   0,   0,  0,   0,  0,  0,   0,  0,   0,   0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {32}, {1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 32, 32}, {32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape2_uint8_1) {
  uint8_t data[32 * 32] = {
      208, 160, 225, 29,  237, 101, 212, 233, 14,  238, 254, 35,  252, 25,  84,  2,   218, 117, 5,   253, 58,  196, 72,
      41,  127, 17,  34,  159, 138, 216, 184, 13,  197, 30,  203, 249, 15,  97,  128, 241, 88,  66,  202, 112, 54,  27,
      57,  236, 112, 186, 58,  108, 0,   133, 79,  85,  180, 17,  55,  198, 147, 16,  98,  108, 211, 167, 81,  1,   15,
      35,  166, 206, 84,  135, 40,  41,  126, 59,  179, 69,  6,   234, 144, 168, 232, 19,  117, 155, 120, 37,  92,  114,
      206, 11,  76,  186, 203, 0,   108, 102, 116, 155, 50,  67,  113, 5,   52,  212, 73,  163, 86,  124, 110, 156, 134,
      247, 9,   189, 27,  147, 103, 61,  221, 238, 119, 28,  73,  229, 162, 51,  78,  5,   40,  186, 120, 96,  41,  226,
      60,  148, 134, 250, 66,  76,  81,  25,  245, 171, 116, 120, 71,  141, 187, 178, 115, 120, 245, 57,  68,  0,   190,
      158, 82,  103, 181, 138, 236, 125, 32,  193, 217, 128, 204, 54,  126, 232, 170, 236, 162, 1,   43,  102, 182, 225,
      170, 210, 35,  242, 241, 175, 4,   9,   16,  145, 21,  198, 244, 23,  84,  187, 151, 116, 152, 182, 50,  247, 227,
      47,  217, 66,  135, 55,  144, 25,  172, 114, 166, 130, 170, 33,  37,  134, 233, 70,  152, 38,  225, 250, 122, 11,
      206, 24,  89,  80,  119, 51,  84,  199, 140, 82,  103, 158, 140, 46,  9,   86,  24,  85,  35,  181, 100, 141, 43,
      97,  8,   79,  162, 113, 1,   119, 15,  60,  72,  195, 93,  223, 106, 192, 245, 123, 37,  33,  43,  115, 230, 228,
      67,  64,  1,   146, 227, 152, 150, 167, 78,  209, 178, 242, 142, 72,  52,  54,  253, 246, 225, 179, 41,  194, 28,
      185, 201, 119, 182, 209, 223, 216, 217, 91,  219, 39,  136, 253, 216, 128, 186, 87,  235, 126, 138, 12,  206, 31,
      220, 172, 212, 37,  178, 130, 171, 202, 73,  163, 22,  73,  82,  196, 40,  222, 50,  60,  94,  93,  11,  176, 133,
      160, 107, 44,  158, 104, 177, 248, 85,  192, 214, 114, 206, 138, 173, 170, 231, 182, 246, 70,  61,  126, 193, 55,
      62,  230, 87,  124, 158, 55,  236, 73,  125, 171, 78,  177, 225, 233, 12,  216, 224, 3,   245, 60,  102, 5,   93,
      151, 48,  78,  86,  8,   90,  97,  187, 134, 48,  59,  18,  69,  235, 22,  79,  62,  57,  75,  139, 93,  112, 69,
      237, 189, 93,  120, 27,  147, 159, 107, 128, 252, 19,  195, 155, 65,  219, 180, 191, 47,  236, 122, 56,  82,  97,
      153, 155, 49,  28,  88,  151, 170, 212, 204, 74,  183, 139, 218, 110, 49,  175, 241, 247, 18,  227, 57,  12,  235,
      167, 13,  30,  65,  205, 184, 170, 126, 244, 23,  144, 157, 169, 225, 226, 248, 111, 76,  45,  232, 18,  185, 8,
      211, 189, 44,  48,  86,  224, 213, 222, 241, 66,  40,  7,   207, 104, 128, 232, 72,  108, 87,  114, 214, 84,  142,
      110, 129, 85,  1,   70,  194, 169, 40,  51,  128, 63,  51,  73,  193, 198, 137, 105, 121, 75,  171, 52,  173, 227,
      206, 22,  214, 110, 17,  210, 191, 178, 192, 191, 13,  224, 181, 232, 156, 79,  222, 59,  7,   152, 136, 109, 243,
      234, 31,  238, 51,  17,  20,  200, 122, 254, 209, 61,  58,  35,  159, 51,  60,  245, 217, 50,  31,  30,  146, 116,
      55,  58,  168, 50,  27,  213, 34,  155, 36,  161, 247, 146, 209, 170, 108, 50,  232, 61,  121, 61,  92,  239, 101,
      35,  34,  57,  176, 175, 65,  128, 126, 226, 66,  41,  52,  150, 35,  83,  84,  67,  48,  129, 4,   1,   172, 234,
      70,  182, 87,  239, 33,  130, 59,  177, 198, 46,  143, 115, 128, 8,   194, 231, 207, 227, 50,  127, 101, 131, 139,
      207, 241, 63,  142, 191, 30,  225, 110, 51,  220, 131, 46,  196, 158, 78,  191, 200, 110, 172, 44,  193, 22,  225,
      254, 93,  170, 73,  242, 92,  114, 37,  1,   191, 120, 234, 205, 236, 95,  44,  44,  25,  146, 48,  35,  191, 120,
      128, 7,   77,  58,  40,  170, 177, 17,  242, 41,  73,  116, 50,  210, 88,  100, 32,  175, 195, 37,  222, 98,  229,
      139, 152, 145, 108, 57,  168, 30,  1,   183, 170, 55,  78,  26,  228, 103, 11,  145, 61,  33,  224, 115, 103, 145,
      17,  207, 109, 35,  202, 188, 124, 134, 233, 200, 49,  146, 240, 75,  118, 41,  105, 122, 51,  235, 191, 44,  58,
      16,  95,  225, 105, 237, 186, 204, 155, 199, 21,  31,  159, 175, 234, 231, 43,  163, 184, 122, 182, 87,  11,  228,
      174, 169, 167, 178, 35,  143, 169, 107, 182, 29,  109, 249, 46,  177, 87,  158, 168, 185, 18,  62,  55,  119, 52,
      108, 203, 251, 16,  161, 15,  46,  6,   246, 93,  161, 89,  165, 142, 182, 43,  141, 152, 124, 187, 7,   243, 243,
      157, 90,  170, 163, 133, 113, 24,  6,   224, 98,  36,  195, 68,  114, 65,  249, 165, 164, 239, 0,   193, 224, 254,
      188, 119, 189, 199, 38,  131, 74,  34,  220, 118, 101, 178, 56,  57,  158, 4,   226, 143, 13,  236, 147, 189, 35,
      22,  103, 112, 212, 43,  51,  213, 49,  175, 26,  222, 177, 204, 82,  191, 222, 61,  160, 160, 137, 159, 254, 69,
      51,  207, 35,  137, 129, 201, 113, 160, 213, 192, 252, 73,  230, 179, 139, 208, 83,  170, 34,  190, 249, 130, 215,
      95,  119, 52,  122, 43,  108, 8,   123, 65,  130, 61,  230, 229, 178, 145, 112, 246, 86,  136, 190, 236, 98,  245,
      83,  173, 30,  143, 199, 89,  84,  149, 93,  56,  109, 230, 239, 117, 52,  222, 108, 158, 116, 126, 234, 114, 201,
      27,  21,  118, 165, 215, 23,  241, 163, 188, 0,   230, 225, 209, 250, 199, 252, 45,  184, 205, 159, 240, 186, 35,
      73,  129, 195, 45,  120, 15,  75,  22,  5,   12,  68,  165, 8,   26,  170, 104, 98,  7,   252, 242, 111, 108, 154,
      240, 32,  96,  103, 138, 22,  210, 231, 193, 122, 221, 214,
  };
  uint8_t ret[1 * 1 * 32 * 32] = {
      208, 160, 225, 29,  237, 101, 212, 233, 14,  238, 254, 35,  252, 25,  84,  2,   218, 117, 5,   253, 58,  196, 72,
      41,  127, 17,  34,  159, 138, 216, 184, 13,  197, 30,  203, 249, 15,  97,  128, 241, 88,  66,  202, 112, 54,  27,
      57,  236, 112, 186, 58,  108, 0,   133, 79,  85,  180, 17,  55,  198, 147, 16,  98,  108, 211, 167, 81,  1,   15,
      35,  166, 206, 84,  135, 40,  41,  126, 59,  179, 69,  6,   234, 144, 168, 232, 19,  117, 155, 120, 37,  92,  114,
      206, 11,  76,  186, 203, 0,   108, 102, 116, 155, 50,  67,  113, 5,   52,  212, 73,  163, 86,  124, 110, 156, 134,
      247, 9,   189, 27,  147, 103, 61,  221, 238, 119, 28,  73,  229, 162, 51,  78,  5,   40,  186, 120, 96,  41,  226,
      60,  148, 134, 250, 66,  76,  81,  25,  245, 171, 116, 120, 71,  141, 187, 178, 115, 120, 245, 57,  68,  0,   190,
      158, 82,  103, 181, 138, 236, 125, 32,  193, 217, 128, 204, 54,  126, 232, 170, 236, 162, 1,   43,  102, 182, 225,
      170, 210, 35,  242, 241, 175, 4,   9,   16,  145, 21,  198, 244, 23,  84,  187, 151, 116, 152, 182, 50,  247, 227,
      47,  217, 66,  135, 55,  144, 25,  172, 114, 166, 130, 170, 33,  37,  134, 233, 70,  152, 38,  225, 250, 122, 11,
      206, 24,  89,  80,  119, 51,  84,  199, 140, 82,  103, 158, 140, 46,  9,   86,  24,  85,  35,  181, 100, 141, 43,
      97,  8,   79,  162, 113, 1,   119, 15,  60,  72,  195, 93,  223, 106, 192, 245, 123, 37,  33,  43,  115, 230, 228,
      67,  64,  1,   146, 227, 152, 150, 167, 78,  209, 178, 242, 142, 72,  52,  54,  253, 246, 225, 179, 41,  194, 28,
      185, 201, 119, 182, 209, 223, 216, 217, 91,  219, 39,  136, 253, 216, 128, 186, 87,  235, 126, 138, 12,  206, 31,
      220, 172, 212, 37,  178, 130, 171, 202, 73,  163, 22,  73,  82,  196, 40,  222, 50,  60,  94,  93,  11,  176, 133,
      160, 107, 44,  158, 104, 177, 248, 85,  192, 214, 114, 206, 138, 173, 170, 231, 182, 246, 70,  61,  126, 193, 55,
      62,  230, 87,  124, 158, 55,  236, 73,  125, 171, 78,  177, 225, 233, 12,  216, 224, 3,   245, 60,  102, 5,   93,
      151, 48,  78,  86,  8,   90,  97,  187, 134, 48,  59,  18,  69,  235, 22,  79,  62,  57,  75,  139, 93,  112, 69,
      237, 189, 93,  120, 27,  147, 159, 107, 128, 252, 19,  195, 155, 65,  219, 180, 191, 47,  236, 122, 56,  82,  97,
      153, 155, 49,  28,  88,  151, 170, 212, 204, 74,  183, 139, 218, 110, 49,  175, 241, 247, 18,  227, 57,  12,  235,
      167, 13,  30,  65,  205, 184, 170, 126, 244, 23,  144, 157, 169, 225, 226, 248, 111, 76,  45,  232, 18,  185, 8,
      211, 189, 44,  48,  86,  224, 213, 222, 241, 66,  40,  7,   207, 104, 128, 232, 72,  108, 87,  114, 214, 84,  142,
      110, 129, 85,  1,   70,  194, 169, 40,  51,  128, 63,  51,  73,  193, 198, 137, 105, 121, 75,  171, 52,  173, 227,
      206, 22,  214, 110, 17,  210, 191, 178, 192, 191, 13,  224, 181, 232, 156, 79,  222, 59,  7,   152, 136, 109, 243,
      234, 31,  238, 51,  17,  20,  200, 122, 254, 209, 61,  58,  35,  159, 51,  60,  245, 217, 50,  31,  30,  146, 116,
      55,  58,  168, 50,  27,  213, 34,  155, 36,  161, 247, 146, 209, 170, 108, 50,  232, 61,  121, 61,  92,  239, 101,
      35,  34,  57,  176, 175, 65,  128, 126, 226, 66,  41,  52,  150, 35,  83,  84,  67,  48,  129, 4,   1,   172, 234,
      70,  182, 87,  239, 33,  130, 59,  177, 198, 46,  143, 115, 128, 8,   194, 231, 207, 227, 50,  127, 101, 131, 139,
      207, 241, 63,  142, 191, 30,  225, 110, 51,  220, 131, 46,  196, 158, 78,  191, 200, 110, 172, 44,  193, 22,  225,
      254, 93,  170, 73,  242, 92,  114, 37,  1,   191, 120, 234, 205, 236, 95,  44,  44,  25,  146, 48,  35,  191, 120,
      128, 7,   77,  58,  40,  170, 177, 17,  242, 41,  73,  116, 50,  210, 88,  100, 32,  175, 195, 37,  222, 98,  229,
      139, 152, 145, 108, 57,  168, 30,  1,   183, 170, 55,  78,  26,  228, 103, 11,  145, 61,  33,  224, 115, 103, 145,
      17,  207, 109, 35,  202, 188, 124, 134, 233, 200, 49,  146, 240, 75,  118, 41,  105, 122, 51,  235, 191, 44,  58,
      16,  95,  225, 105, 237, 186, 204, 155, 199, 21,  31,  159, 175, 234, 231, 43,  163, 184, 122, 182, 87,  11,  228,
      174, 169, 167, 178, 35,  143, 169, 107, 182, 29,  109, 249, 46,  177, 87,  158, 168, 185, 18,  62,  55,  119, 52,
      108, 203, 251, 16,  161, 15,  46,  6,   246, 93,  161, 89,  165, 142, 182, 43,  141, 152, 124, 187, 7,   243, 243,
      157, 90,  170, 163, 133, 113, 24,  6,   224, 98,  36,  195, 68,  114, 65,  249, 165, 164, 239, 0,   193, 224, 254,
      188, 119, 189, 199, 38,  131, 74,  34,  220, 118, 101, 178, 56,  57,  158, 4,   226, 143, 13,  236, 147, 189, 35,
      22,  103, 112, 212, 43,  51,  213, 49,  175, 26,  222, 177, 204, 82,  191, 222, 61,  160, 160, 137, 159, 254, 69,
      51,  207, 35,  137, 129, 201, 113, 160, 213, 192, 252, 73,  230, 179, 139, 208, 83,  170, 34,  190, 249, 130, 215,
      95,  119, 52,  122, 43,  108, 8,   123, 65,  130, 61,  230, 229, 178, 145, 112, 246, 86,  136, 190, 236, 98,  245,
      83,  173, 30,  143, 199, 89,  84,  149, 93,  56,  109, 230, 239, 117, 52,  222, 108, 158, 116, 126, 234, 114, 201,
      27,  21,  118, 165, 215, 23,  241, 163, 188, 0,   230, 225, 209, 250, 199, 252, 45,  184, 205, 159, 240, 186, 35,
      73,  129, 195, 45,  120, 15,  75,  22,  5,   12,  68,  165, 8,   26,  170, 104, 98,  7,   252, 242, 111, 108, 154,
      240, 32,  96,  103, 138, 22,  210, 231, 193, 122, 221, 214,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {32, 32}, {1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 32, 32}, {32, 32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape2_uint8_2) {
  uint8_t data[30 * 33] = {
      184, 109, 202, 127, 3,   82,  191, 133, 0,   197, 127, 115, 149, 156, 126, 88,  84,  116, 125, 205, 68,  166, 145,
      139, 193, 43,  173, 235, 19,  147, 191, 35,  126, 138, 161, 82,  130, 77,  112, 47,  115, 163, 235, 114, 51,  2,
      53,  60,  54,  129, 74,  249, 54,  200, 173, 240, 126, 70,  184, 138, 16,  79,  117, 233, 238, 144, 242, 230, 157,
      18,  87,  185, 98,  8,   236, 232, 2,   108, 3,   180, 177, 164, 128, 194, 171, 93,  64,  194, 214, 31,  86,  114,
      109, 253, 174, 185, 167, 239, 79,  96,  84,  253, 7,   153, 205, 209, 120, 107, 216, 172, 239, 178, 159, 19,  161,
      114, 194, 183, 170, 173, 201, 234, 202, 131, 78,  0,   61,  3,   101, 23,  98,  39,  208, 173, 243, 93,  104, 78,
      232, 242, 73,  122, 87,  83,  12,  136, 209, 61,  148, 234, 220, 183, 44,  71,  127, 239, 55,  136, 73,  115, 29,
      206, 72,  175, 214, 92,  196, 19,  242, 106, 220, 102, 215, 50,  78,  116, 74,  225, 221, 168, 83,  213, 239, 197,
      137, 209, 184, 35,  149, 125, 98,  216, 115, 231, 152, 179, 244, 44,  152, 89,  107, 147, 37,  218, 131, 55,  96,
      25,  36,  103, 19,  211, 194, 172, 113, 43,  200, 211, 190, 63,  133, 120, 234, 129, 48,  95,  218, 66,  253, 188,
      66,  204, 75,  218, 210, 126, 215, 2,   98,  205, 108, 56,  87,  128, 16,  231, 24,  165, 162, 27,  85,  89,  117,
      240, 239, 179, 96,  215, 198, 110, 80,  178, 68,  186, 46,  83,  102, 202, 216, 124, 5,   86,  178, 62,  198, 229,
      100, 54,  111, 16,  206, 151, 245, 100, 179, 100, 33,  106, 97,  5,   61,  43,  111, 47,  135, 210, 87,  135, 36,
      1,   212, 102, 217, 14,  183, 122, 27,  134, 224, 107, 186, 5,   29,  204, 114, 64,  54,  48,  48,  32,  219, 89,
      95,  50,  97,  155, 23,  125, 131, 222, 181, 220, 113, 171, 178, 168, 75,  215, 150, 102, 142, 245, 116, 181, 133,
      164, 241, 43,  61,  12,  214, 23,  54,  161, 100, 202, 17,  43,  54,  66,  28,  92,  77,  114, 246, 207, 22,  63,
      74,  97,  100, 58,  167, 232, 16,  180, 59,  133, 2,   99,  95,  46,  103, 22,  168, 4,   71,  88,  167, 44,  9,
      60,  232, 226, 128, 254, 236, 206, 120, 230, 76,  214, 93,  46,  225, 99,  145, 123, 193, 112, 124, 30,  13,  204,
      108, 148, 252, 234, 70,  122, 121, 94,  230, 73,  175, 224, 233, 2,   135, 110, 197, 224, 60,  196, 107, 248, 67,
      122, 224, 59,  44,  178, 131, 23,  36,  2,   185, 155, 152, 3,   203, 0,   50,  230, 131, 254, 235, 55,  199, 16,
      61,  6,   203, 26,  250, 148, 213, 182, 40,  9,   99,  87,  46,  140, 56,  144, 81,  12,  50,  232, 75,  110, 208,
      108, 77,  244, 80,  90,  49,  221, 162, 189, 57,  118, 67,  199, 116, 248, 80,  232, 77,  52,  196, 107, 21,  91,
      10,  96,  225, 82,  88,  6,   121, 241, 201, 251, 192, 53,  252, 66,  123, 116, 151, 138, 190, 102, 82,  13,  159,
      158, 184, 182, 156, 159, 143, 120, 26,  9,   122, 163, 64,  26,  185, 176, 66,  194, 235, 168, 166, 46,  199, 113,
      167, 21,  203, 157, 163, 117, 222, 177, 161, 133, 34,  241, 28,  241, 80,  71,  117, 90,  51,  133, 134, 180, 214,
      75,  24,  165, 74,  187, 248, 49,  86,  97,  214, 60,  161, 88,  136, 66,  229, 81,  29,  17,  90,  187, 226, 35,
      160, 254, 63,  245, 156, 151, 117, 152, 247, 178, 232, 213, 91,  233, 167, 172, 190, 1,   251, 245, 94,  7,   94,
      8,   108, 148, 199, 153, 69,  217, 202, 33,  22,  143, 216, 131, 134, 236, 76,  84,  1,   1,   146, 205, 5,   195,
      216, 136, 181, 93,  54,  1,   249, 54,  239, 101, 130, 59,  50,  230, 197, 17,  72,  135, 1,   221, 164, 175, 60,
      185, 149, 6,   153, 121, 249, 124, 47,  216, 248, 124, 222, 253, 91,  25,  251, 17,  114, 116, 67,  15,  17,  209,
      195, 9,   228, 168, 241, 165, 238, 57,  148, 249, 185, 56,  136, 167, 100, 114, 169, 41,  199, 74,  179, 19,  143,
      71,  215, 181, 222, 157, 144, 178, 57,  167, 177, 1,   161, 79,  19,  33,  243, 245, 152, 102, 160, 221, 58,  182,
      140, 225, 94,  247, 23,  90,  248, 207, 36,  185, 27,  28,  220, 15,  73,  198, 228, 45,  2,   55,  153, 2,   86,
      103, 221, 189, 19,  39,  202, 123, 103, 64,  110, 213, 58,  33,  8,   77,  141, 0,   205, 89,  2,   51,  26,  249,
      28,  34,  143, 69,  85,  231, 62,  125, 211, 23,  39,  196, 207, 151, 91,  171, 232, 236, 229, 82,  125, 111, 180,
      246, 48,  98,  53,  5,   121, 236, 123, 102, 33,  134, 137, 24,  209, 173, 202, 224, 148, 166, 71,  99,  163, 120,
      66,  13,  88,  65,  212, 123, 52,  45,  164, 154, 101, 144, 127, 212, 199, 31,  170, 21,  126, 203, 86,  21,  168,
      165, 253, 243, 144, 105, 62,  188, 80,  45,  33,  192, 190, 248, 211, 240, 178, 157, 14,  145, 95,  248, 194, 143,
      65,  217, 70,  160, 85,  178, 233, 159, 96,  216, 181, 252, 95,  47,  220, 20,  239, 113, 43,  98,  9,   154, 253,
      132, 69,  131, 109, 238, 37,  252, 46,  88,  188, 167, 153, 28,  100, 116, 175, 142, 52,  209, 228, 152, 116, 98,
      102, 15,  52,  214, 47,  204, 185, 5,   189, 56,  211, 125, 155, 76,  59,  234, 223, 47,  10,  166, 59,  112, 108,
      32,  214, 88,  159, 229, 47,  209, 237, 9,   95,  189, 180, 54,  208, 31,  201, 88,  78,  167, 166, 48,  8,   54,
      8,   191, 176, 224, 167, 204, 185, 243, 211, 40,  57,  49,  118, 207, 5,   189, 56,  138, 69,  38,  56,  149, 156,
      110,
  };
  uint8_t ret[2 * 1 * 32 * 32] = {
      184, 109, 202, 127, 3,   82,  191, 133, 0,   197, 127, 115, 149, 156, 126, 88,  84,  116, 125, 205, 68,  166, 145,
      139, 193, 43,  173, 235, 19,  147, 191, 35,  138, 161, 82,  130, 77,  112, 47,  115, 163, 235, 114, 51,  2,   53,
      60,  54,  129, 74,  249, 54,  200, 173, 240, 126, 70,  184, 138, 16,  79,  117, 233, 238, 242, 230, 157, 18,  87,
      185, 98,  8,   236, 232, 2,   108, 3,   180, 177, 164, 128, 194, 171, 93,  64,  194, 214, 31,  86,  114, 109, 253,
      174, 185, 167, 239, 96,  84,  253, 7,   153, 205, 209, 120, 107, 216, 172, 239, 178, 159, 19,  161, 114, 194, 183,
      170, 173, 201, 234, 202, 131, 78,  0,   61,  3,   101, 23,  98,  208, 173, 243, 93,  104, 78,  232, 242, 73,  122,
      87,  83,  12,  136, 209, 61,  148, 234, 220, 183, 44,  71,  127, 239, 55,  136, 73,  115, 29,  206, 72,  175, 92,
      196, 19,  242, 106, 220, 102, 215, 50,  78,  116, 74,  225, 221, 168, 83,  213, 239, 197, 137, 209, 184, 35,  149,
      125, 98,  216, 115, 231, 152, 179, 244, 152, 89,  107, 147, 37,  218, 131, 55,  96,  25,  36,  103, 19,  211, 194,
      172, 113, 43,  200, 211, 190, 63,  133, 120, 234, 129, 48,  95,  218, 66,  253, 188, 204, 75,  218, 210, 126, 215,
      2,   98,  205, 108, 56,  87,  128, 16,  231, 24,  165, 162, 27,  85,  89,  117, 240, 239, 179, 96,  215, 198, 110,
      80,  178, 68,  46,  83,  102, 202, 216, 124, 5,   86,  178, 62,  198, 229, 100, 54,  111, 16,  206, 151, 245, 100,
      179, 100, 33,  106, 97,  5,   61,  43,  111, 47,  135, 210, 135, 36,  1,   212, 102, 217, 14,  183, 122, 27,  134,
      224, 107, 186, 5,   29,  204, 114, 64,  54,  48,  48,  32,  219, 89,  95,  50,  97,  155, 23,  125, 131, 181, 220,
      113, 171, 178, 168, 75,  215, 150, 102, 142, 245, 116, 181, 133, 164, 241, 43,  61,  12,  214, 23,  54,  161, 100,
      202, 17,  43,  54,  66,  28,  92,  114, 246, 207, 22,  63,  74,  97,  100, 58,  167, 232, 16,  180, 59,  133, 2,
      99,  95,  46,  103, 22,  168, 4,   71,  88,  167, 44,  9,   60,  232, 226, 128, 236, 206, 120, 230, 76,  214, 93,
      46,  225, 99,  145, 123, 193, 112, 124, 30,  13,  204, 108, 148, 252, 234, 70,  122, 121, 94,  230, 73,  175, 224,
      233, 2,   110, 197, 224, 60,  196, 107, 248, 67,  122, 224, 59,  44,  178, 131, 23,  36,  2,   185, 155, 152, 3,
      203, 0,   50,  230, 131, 254, 235, 55,  199, 16,  61,  203, 26,  250, 148, 213, 182, 40,  9,   99,  87,  46,  140,
      56,  144, 81,  12,  50,  232, 75,  110, 208, 108, 77,  244, 80,  90,  49,  221, 162, 189, 57,  118, 199, 116, 248,
      80,  232, 77,  52,  196, 107, 21,  91,  10,  96,  225, 82,  88,  6,   121, 241, 201, 251, 192, 53,  252, 66,  123,
      116, 151, 138, 190, 102, 82,  159, 158, 184, 182, 156, 159, 143, 120, 26,  9,   122, 163, 64,  26,  185, 176, 66,
      194, 235, 168, 166, 46,  199, 113, 167, 21,  203, 157, 163, 117, 222, 177, 133, 34,  241, 28,  241, 80,  71,  117,
      90,  51,  133, 134, 180, 214, 75,  24,  165, 74,  187, 248, 49,  86,  97,  214, 60,  161, 88,  136, 66,  229, 81,
      29,  90,  187, 226, 35,  160, 254, 63,  245, 156, 151, 117, 152, 247, 178, 232, 213, 91,  233, 167, 172, 190, 1,
      251, 245, 94,  7,   94,  8,   108, 148, 199, 153, 217, 202, 33,  22,  143, 216, 131, 134, 236, 76,  84,  1,   1,
      146, 205, 5,   195, 216, 136, 181, 93,  54,  1,   249, 54,  239, 101, 130, 59,  50,  230, 197, 72,  135, 1,   221,
      164, 175, 60,  185, 149, 6,   153, 121, 249, 124, 47,  216, 248, 124, 222, 253, 91,  25,  251, 17,  114, 116, 67,
      15,  17,  209, 195, 9,   168, 241, 165, 238, 57,  148, 249, 185, 56,  136, 167, 100, 114, 169, 41,  199, 74,  179,
      19,  143, 71,  215, 181, 222, 157, 144, 178, 57,  167, 177, 1,   161, 19,  33,  243, 245, 152, 102, 160, 221, 58,
      182, 140, 225, 94,  247, 23,  90,  248, 207, 36,  185, 27,  28,  220, 15,  73,  198, 228, 45,  2,   55,  153, 2,
      103, 221, 189, 19,  39,  202, 123, 103, 64,  110, 213, 58,  33,  8,   77,  141, 0,   205, 89,  2,   51,  26,  249,
      28,  34,  143, 69,  85,  231, 62,  125, 211, 39,  196, 207, 151, 91,  171, 232, 236, 229, 82,  125, 111, 180, 246,
      48,  98,  53,  5,   121, 236, 123, 102, 33,  134, 137, 24,  209, 173, 202, 224, 148, 166, 99,  163, 120, 66,  13,
      88,  65,  212, 123, 52,  45,  164, 154, 101, 144, 127, 212, 199, 31,  170, 21,  126, 203, 86,  21,  168, 165, 253,
      243, 144, 105, 62,  80,  45,  33,  192, 190, 248, 211, 240, 178, 157, 14,  145, 95,  248, 194, 143, 65,  217, 70,
      160, 85,  178, 233, 159, 96,  216, 181, 252, 95,  47,  220, 20,  113, 43,  98,  9,   154, 253, 132, 69,  131, 109,
      238, 37,  252, 46,  88,  188, 167, 153, 28,  100, 116, 175, 142, 52,  209, 228, 152, 116, 98,  102, 15,  52,  47,
      204, 185, 5,   189, 56,  211, 125, 155, 76,  59,  234, 223, 47,  10,  166, 59,  112, 108, 32,  214, 88,  159, 229,
      47,  209, 237, 9,   95,  189, 180, 54,  31,  201, 88,  78,  167, 166, 48,  8,   54,  8,   191, 176, 224, 167, 204,
      185, 243, 211, 40,  57,  49,  118, 207, 5,   189, 56,  138, 69,  38,  56,  149, 156, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   126, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   144, 0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   79,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   39,  0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   214, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   44,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   66,  0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   186, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   87,  0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   222, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   77,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   254, 0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   135, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   6,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      67,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   13,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   161, 0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   17,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   69,  0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   17,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   228, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   79,  0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   86,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   23,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   71,  0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   188, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   239, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   214, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   208, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   110, 0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {30, 33}, {1, 2, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 2, 32, 32}, {30, 33}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape3_uint8) {
  uint8_t data[2 * 30 * 32] = {
      252, 93,  197, 26,  218, 156, 186, 88,  248, 251, 232, 100, 3,   79,  56,  127, 142, 20,  63,  109, 145, 151, 206,
      52,  164, 20,  233, 117, 57,  218, 169, 158, 174, 118, 118, 54,  99,  37,  194, 209, 116, 38,  26,  72,  110, 60,
      215, 102, 169, 202, 118, 70,  238, 238, 179, 241, 137, 125, 154, 116, 59,  231, 154, 208, 242, 187, 206, 179, 99,
      254, 40,  52,  124, 4,   217, 111, 26,  184, 153, 59,  20,  85,  150, 0,   15,  25,  144, 134, 116, 54,  184, 97,
      189, 140, 40,  188, 144, 116, 64,  65,  207, 244, 139, 211, 202, 0,   170, 75,  219, 246, 93,  99,  60,  28,  46,
      78,  73,  205, 79,  250, 95,  198, 169, 79,  40,  253, 247, 101, 114, 170, 105, 148, 245, 237, 157, 46,  248, 212,
      157, 228, 116, 56,  43,  245, 181, 147, 6,   168, 217, 141, 196, 48,  37,  93,  234, 154, 189, 64,  16,  85,  184,
      113, 154, 125, 54,  84,  21,  171, 245, 63,  96,  194, 58,  176, 75,  64,  161, 59,  249, 160, 240, 52,  253, 122,
      185, 123, 42,  133, 139, 98,  191, 162, 71,  157, 143, 60,  233, 20,  58,  0,   171, 253, 34,  159, 65,  35,  247,
      107, 17,  78,  88,  182, 193, 66,  119, 177, 143, 231, 15,  35,  193, 137, 96,  175, 36,  59,  36,  62,  167, 196,
      67,  44,  172, 218, 159, 122, 94,  72,  54,  65,  23,  69,  244, 219, 117, 180, 72,  162, 88,  118, 24,  202, 93,
      67,  55,  86,  93,  122, 15,  92,  151, 28,  95,  62,  246, 203, 4,   23,  92,  175, 153, 31,  59,  142, 6,   199,
      198, 214, 78,  20,  51,  228, 193, 246, 145, 144, 129, 31,  150, 151, 206, 13,  5,   2,   78,  161, 233, 50,  217,
      254, 211, 0,   155, 182, 74,  98,  64,  126, 218, 1,   18,  202, 146, 176, 74,  127, 45,  192, 101, 153, 122, 101,
      88,  46,  128, 221, 86,  74,  119, 185, 213, 91,  167, 69,  211, 129, 73,  114, 250, 216, 52,  250, 184, 149, 69,
      147, 205, 82,  115, 246, 98,  75,  139, 102, 125, 26,  200, 205, 191, 197, 70,  2,   11,  244, 192, 34,  88,  187,
      101, 238, 227, 150, 124, 215, 145, 91,  102, 212, 17,  117, 134, 71,  111, 129, 39,  253, 35,  241, 213, 18,  129,
      239, 216, 181, 170, 103, 123, 226, 142, 24,  128, 169, 160, 56,  219, 6,   62,  251, 167, 229, 31,  99,  177, 139,
      137, 232, 135, 59,  25,  197, 128, 62,  208, 8,   240, 131, 64,  147, 98,  64,  24,  72,  213, 145, 148, 164, 81,
      180, 185, 155, 40,  72,  39,  69,  111, 208, 121, 212, 57,  143, 36,  203, 77,  19,  167, 154, 190, 123, 52,  191,
      7,   105, 154, 142, 152, 59,  58,  101, 28,  195, 223, 215, 209, 127, 218, 121, 217, 46,  200, 192, 197, 188, 134,
      159, 49,  75,  67,  247, 75,  96,  50,  163, 109, 147, 147, 38,  120, 2,   129, 171, 32,  198, 127, 203, 196, 111,
      81,  253, 90,  80,  125, 234, 17,  205, 216, 55,  140, 227, 131, 180, 0,   208, 36,  85,  16,  69,  163, 58,  177,
      136, 109, 243, 160, 64,  76,  181, 182, 35,  182, 118, 243, 93,  4,   176, 208, 61,  193, 171, 105, 33,  89,  81,
      72,  220, 94,  153, 36,  96,  223, 47,  198, 150, 21,  254, 130, 10,  221, 81,  206, 47,  119, 151, 243, 123, 206,
      94,  164, 130, 152, 147, 226, 135, 109, 249, 147, 216, 225, 1,   46,  158, 26,  137, 71,  10,  127, 124, 172, 50,
      247, 82,  11,  8,   252, 179, 23,  107, 80,  114, 168, 194, 23,  95,  86,  93,  177, 71,  82,  180, 161, 95,  58,
      146, 154, 219, 84,  101, 214, 56,  125, 76,  89,  172, 244, 203, 242, 104, 77,  23,  6,   229, 223, 172, 146, 184,
      68,  245, 12,  117, 171, 221, 170, 201, 201, 108, 228, 119, 221, 89,  107, 202, 41,  162, 168, 157, 139, 225, 178,
      179, 163, 53,  64,  37,  75,  226, 249, 197, 40,  184, 132, 153, 126, 158, 233, 170, 198, 142, 132, 205, 40,  18,
      128, 10,  246, 240, 156, 109, 233, 132, 6,   145, 184, 166, 64,  19,  187, 31,  60,  37,  241, 61,  108, 1,   70,
      78,  149, 134, 91,  2,   169, 181, 72,  79,  218, 240, 69,  45,  168, 162, 123, 106, 77,  252, 91,  66,  38,  111,
      132, 249, 213, 254, 155, 113, 74,  30,  187, 123, 210, 94,  106, 47,  155, 85,  208, 220, 187, 213, 173, 50,  163,
      77,  110, 52,  59,  135, 138, 153, 93,  61,  18,  150, 50,  104, 95,  155, 115, 203, 90,  13,  250, 94,  65,  112,
      198, 136, 81,  215, 167, 103, 145, 116, 245, 213, 12,  78,  144, 43,  133, 4,   35,  21,  157, 149, 186, 118, 131,
      48,  145, 16,  149, 0,   128, 135, 250, 134, 207, 114, 211, 3,   178, 184, 170, 216, 233, 237, 182, 153, 132, 24,
      36,  117, 217, 242, 187, 109, 12,  79,  196, 124, 200, 138, 160, 43,  242, 55,  157, 185, 252, 40,  46,  232, 112,
      137, 166, 61,  5,   67,  136, 32,  212, 172, 55,  58,  133, 72,  248, 101, 19,  65,  208, 134, 66,  76,  63,  178,
      207, 133, 20,  191, 48,  31,  116, 67,  233, 116, 119, 216, 17,  137, 201, 219, 181, 161, 114, 128, 41,  127, 0,
      226, 87,  43,  241, 2,   67,  136, 230, 104, 43,  178, 23,  155, 74,  139, 175, 226, 121, 135, 190, 227, 179, 148,
      188, 133, 209, 32,  230, 128, 158, 248, 146, 131, 226, 37,  168, 228, 48,  78,  112, 81,  137, 99,  0,   11,  184,
      126, 87,  179, 71,  24,  143, 200, 217, 48,  219, 152, 14,  204, 150, 156, 239, 220, 59,  111, 23,  167, 180, 220,
      191, 128, 50,  82,  173, 69,  42,  215, 95,  171, 114, 210, 15,  149, 155, 35,  250, 250, 153, 208, 64,  191, 231,
      232, 238, 153, 219, 188, 23,  82,  252, 1,   50,  33,  38,  204, 169, 118, 30,  129, 33,  130, 239, 208, 153, 221,
      94,  212, 87,  127, 156, 109, 151, 176, 168, 41,  168, 46,  31,  228, 81,  201, 154, 113, 190, 201, 254, 169, 113,
      205, 43,  157, 96,  138, 118, 181, 233, 40,  173, 120, 198, 64,  96,  162, 175, 1,   62,  84,  231, 29,  29,  204,
      201, 141, 253, 149, 186, 176, 118, 197, 18,  131, 78,  198, 98,  80,  203, 133, 22,  34,  201, 120, 73,  93,  223,
      128, 222, 213, 218, 66,  252, 130, 12,  221, 124, 102, 80,  150, 57,  238, 38,  136, 183, 96,  8,   227, 52,  235,
      62,  197, 12,  62,  25,  78,  222, 91,  193, 140, 86,  210, 56,  187, 34,  222, 25,  0,   182, 117, 246, 232, 7,
      79,  70,  47,  60,  233, 194, 203, 13,  186, 15,  115, 17,  246, 130, 212, 105, 115, 142, 151, 7,   135, 115, 51,
      241, 67,  228, 61,  204, 208, 95,  149, 164, 146, 145, 161, 186, 108, 180, 50,  166, 70,  143, 95,  108, 114, 28,
      127, 19,  69,  161, 156, 86,  150, 147, 72,  97,  238, 172, 62,  216, 98,  5,   96,  57,  216, 204, 159, 43,  82,
      104, 233, 56,  2,   55,  148, 2,   80,  146, 132, 62,  76,  229, 59,  212, 236, 227, 1,   3,   217, 23,  36,  238,
      155, 157, 254, 175, 45,  228, 185, 102, 199, 43,  28,  72,  228, 171, 137, 9,   113, 215, 69,  26,  62,  138, 10,
      10,  117, 9,   145, 125, 216, 195, 111, 110, 154, 118, 36,  159, 155, 165, 198, 70,  10,  254, 245, 218, 93,  53,
      105, 188, 86,  140, 204, 9,   150, 234, 126, 157, 62,  41,  3,   22,  80,  190, 15,  81,  41,  69,  42,  124, 87,
      21,  54,  119, 209, 48,  215, 153, 94,  210, 139, 165, 171, 153, 70,  123, 51,  151, 0,   12,  222, 191, 144, 42,
      5,   13,  71,  172, 73,  92,  120, 213, 226, 46,  161, 63,  136, 2,   205, 123, 67,  112, 206, 176, 21,  28,  4,
      29,  89,  45,  246, 65,  204, 178, 175, 48,  20,  167, 54,  146, 37,  206, 91,  110, 195, 9,   179, 16,  69,  15,
      209, 100, 60,  217, 178, 159, 9,   25,  11,  154, 215, 138, 214, 248, 249, 217, 146, 123, 100, 50,  33,  86,  197,
      115, 47,  30,  169, 162, 121, 92,  21,  21,  140, 113, 28,  100, 153, 211, 106, 68,  21,  56,  54,  135, 155, 192,
      105, 192, 97,  132, 105, 132, 191, 244, 82,  141, 213, 97,  122, 62,  204, 112, 164, 24,  26,  11,  171, 173, 114,
      233, 204, 125, 105, 36,  123, 236, 221, 115, 7,   221, 4,   34,  69,  183, 99,  63,  135, 245, 14,  90,  236, 239,
      201, 84,  167, 250, 83,  254, 58,  4,   56,  253, 83,  53,  25,  234, 30,  122, 85,  242, 51,  113, 241, 242, 25,
      8,   8,   70,  151, 252, 84,  86,  27,  102, 111, 61,  235, 131, 171, 182, 48,  179, 75,  18,  168, 168, 190, 33,
      21,  156, 215, 232, 103, 10,  142, 199, 201, 118, 144, 163, 215, 146, 88,  181, 12,  63,  229, 61,  203, 120, 149,
      158, 149, 66,  88,  4,   116, 188, 126, 80,  76,  69,  70,  213, 230, 17,  43,  124, 165, 215, 38,  15,  124, 124,
      191, 95,  125, 228, 74,  234, 103, 244, 34,  196, 24,  70,  246, 248, 54,  126, 198, 229, 180, 217, 95,  148, 208,
      187, 119, 181, 239, 194, 206, 245, 16,  253, 20,  219, 9,   18,  59,  136, 233, 138, 145, 88,  162, 143, 210, 111,
      226, 176, 172, 159, 248, 2,   30,  31,  9,   229, 146, 142, 86,  240, 77,  102, 156, 225, 102, 114, 78,  19,  245,
      237, 137, 133, 66,  110, 204, 100, 3,   8,   161, 164, 38,  14,  21,  203, 152, 212, 129, 199, 189, 188, 13,  248,
      223, 4,   26,  124, 253, 239, 174, 84,  42,  43,  117, 113, 229, 120, 113, 164, 100, 4,   146, 49,  68,  4,   87,
      102, 53,  43,  101, 86,  148, 195, 21,  16,  88,  213, 122, 239, 97,  210, 223, 83,  237, 124, 104, 4,   184, 24,
      193, 40,  108, 222, 254, 103, 2,   134, 240, 221, 68,  72,  76,  247, 119, 238, 102, 9,   6,   43,  143, 151, 243,
      34,  10,  254, 107, 211, 233, 100, 234, 103, 31,  218, 170, 219, 242, 250, 186, 196, 208, 37,  107, 182, 62,  137,
      248, 13,  241, 230, 104, 40,  138, 231, 171, 213, 35,  104, 253, 195, 6,   26,  34,  133, 33,  195, 81,  186, 111,
      9,   104, 86,  3,   91,  96,  195, 157, 107, 148, 90,  135, 110, 104, 222, 37,  183, 10,  221, 150, 27,  243, 127,
      69,  191, 126, 127, 208, 65,  198, 50,  24,  49,  134, 131, 4,   241, 87,  75,  44,  248, 19,  86,  215, 200, 130,
      20,  205, 86,  197, 156, 8,   142, 109, 220, 75,  195, 157, 73,  201, 202, 80,  59,  242, 9,   8,   131, 153, 2,
      245, 76,  38,  195, 197, 157, 118, 50,  246, 44,  254, 33,  65,  31,  216, 187, 155, 35,  28,  238, 147, 175, 122,
      246, 104, 188, 192, 81,  55,  138, 165, 228, 126, 240, 88,  99,  22,  58,  133, 150, 59,  141, 35,  243, 66,  198,
      245, 111, 229, 113, 246, 248, 48,  155, 231, 170, 214, 76,  21,  208, 105, 140, 141, 93,  23,  187, 73,  140, 201,
      46,  254, 174, 232, 206, 80,  71,  35,  91,  217, 143, 167, 83,  89,  151, 233, 29,  170, 211, 87,  40,  98,  62,
      161, 237, 32,  236, 65,  48,  27,  162, 180, 7,   1,
  };
  uint8_t ret[2 * 1 * 1 * 32 * 32] = {
      252, 93,  197, 26,  218, 156, 186, 88,  248, 251, 232, 100, 3,   79,  56,  127, 142, 20,  63,  109, 145, 151, 206,
      52,  164, 20,  233, 117, 57,  218, 169, 158, 174, 118, 118, 54,  99,  37,  194, 209, 116, 38,  26,  72,  110, 60,
      215, 102, 169, 202, 118, 70,  238, 238, 179, 241, 137, 125, 154, 116, 59,  231, 154, 208, 242, 187, 206, 179, 99,
      254, 40,  52,  124, 4,   217, 111, 26,  184, 153, 59,  20,  85,  150, 0,   15,  25,  144, 134, 116, 54,  184, 97,
      189, 140, 40,  188, 144, 116, 64,  65,  207, 244, 139, 211, 202, 0,   170, 75,  219, 246, 93,  99,  60,  28,  46,
      78,  73,  205, 79,  250, 95,  198, 169, 79,  40,  253, 247, 101, 114, 170, 105, 148, 245, 237, 157, 46,  248, 212,
      157, 228, 116, 56,  43,  245, 181, 147, 6,   168, 217, 141, 196, 48,  37,  93,  234, 154, 189, 64,  16,  85,  184,
      113, 154, 125, 54,  84,  21,  171, 245, 63,  96,  194, 58,  176, 75,  64,  161, 59,  249, 160, 240, 52,  253, 122,
      185, 123, 42,  133, 139, 98,  191, 162, 71,  157, 143, 60,  233, 20,  58,  0,   171, 253, 34,  159, 65,  35,  247,
      107, 17,  78,  88,  182, 193, 66,  119, 177, 143, 231, 15,  35,  193, 137, 96,  175, 36,  59,  36,  62,  167, 196,
      67,  44,  172, 218, 159, 122, 94,  72,  54,  65,  23,  69,  244, 219, 117, 180, 72,  162, 88,  118, 24,  202, 93,
      67,  55,  86,  93,  122, 15,  92,  151, 28,  95,  62,  246, 203, 4,   23,  92,  175, 153, 31,  59,  142, 6,   199,
      198, 214, 78,  20,  51,  228, 193, 246, 145, 144, 129, 31,  150, 151, 206, 13,  5,   2,   78,  161, 233, 50,  217,
      254, 211, 0,   155, 182, 74,  98,  64,  126, 218, 1,   18,  202, 146, 176, 74,  127, 45,  192, 101, 153, 122, 101,
      88,  46,  128, 221, 86,  74,  119, 185, 213, 91,  167, 69,  211, 129, 73,  114, 250, 216, 52,  250, 184, 149, 69,
      147, 205, 82,  115, 246, 98,  75,  139, 102, 125, 26,  200, 205, 191, 197, 70,  2,   11,  244, 192, 34,  88,  187,
      101, 238, 227, 150, 124, 215, 145, 91,  102, 212, 17,  117, 134, 71,  111, 129, 39,  253, 35,  241, 213, 18,  129,
      239, 216, 181, 170, 103, 123, 226, 142, 24,  128, 169, 160, 56,  219, 6,   62,  251, 167, 229, 31,  99,  177, 139,
      137, 232, 135, 59,  25,  197, 128, 62,  208, 8,   240, 131, 64,  147, 98,  64,  24,  72,  213, 145, 148, 164, 81,
      180, 185, 155, 40,  72,  39,  69,  111, 208, 121, 212, 57,  143, 36,  203, 77,  19,  167, 154, 190, 123, 52,  191,
      7,   105, 154, 142, 152, 59,  58,  101, 28,  195, 223, 215, 209, 127, 218, 121, 217, 46,  200, 192, 197, 188, 134,
      159, 49,  75,  67,  247, 75,  96,  50,  163, 109, 147, 147, 38,  120, 2,   129, 171, 32,  198, 127, 203, 196, 111,
      81,  253, 90,  80,  125, 234, 17,  205, 216, 55,  140, 227, 131, 180, 0,   208, 36,  85,  16,  69,  163, 58,  177,
      136, 109, 243, 160, 64,  76,  181, 182, 35,  182, 118, 243, 93,  4,   176, 208, 61,  193, 171, 105, 33,  89,  81,
      72,  220, 94,  153, 36,  96,  223, 47,  198, 150, 21,  254, 130, 10,  221, 81,  206, 47,  119, 151, 243, 123, 206,
      94,  164, 130, 152, 147, 226, 135, 109, 249, 147, 216, 225, 1,   46,  158, 26,  137, 71,  10,  127, 124, 172, 50,
      247, 82,  11,  8,   252, 179, 23,  107, 80,  114, 168, 194, 23,  95,  86,  93,  177, 71,  82,  180, 161, 95,  58,
      146, 154, 219, 84,  101, 214, 56,  125, 76,  89,  172, 244, 203, 242, 104, 77,  23,  6,   229, 223, 172, 146, 184,
      68,  245, 12,  117, 171, 221, 170, 201, 201, 108, 228, 119, 221, 89,  107, 202, 41,  162, 168, 157, 139, 225, 178,
      179, 163, 53,  64,  37,  75,  226, 249, 197, 40,  184, 132, 153, 126, 158, 233, 170, 198, 142, 132, 205, 40,  18,
      128, 10,  246, 240, 156, 109, 233, 132, 6,   145, 184, 166, 64,  19,  187, 31,  60,  37,  241, 61,  108, 1,   70,
      78,  149, 134, 91,  2,   169, 181, 72,  79,  218, 240, 69,  45,  168, 162, 123, 106, 77,  252, 91,  66,  38,  111,
      132, 249, 213, 254, 155, 113, 74,  30,  187, 123, 210, 94,  106, 47,  155, 85,  208, 220, 187, 213, 173, 50,  163,
      77,  110, 52,  59,  135, 138, 153, 93,  61,  18,  150, 50,  104, 95,  155, 115, 203, 90,  13,  250, 94,  65,  112,
      198, 136, 81,  215, 167, 103, 145, 116, 245, 213, 12,  78,  144, 43,  133, 4,   35,  21,  157, 149, 186, 118, 131,
      48,  145, 16,  149, 0,   128, 135, 250, 134, 207, 114, 211, 3,   178, 184, 170, 216, 233, 237, 182, 153, 132, 24,
      36,  117, 217, 242, 187, 109, 12,  79,  196, 124, 200, 138, 160, 43,  242, 55,  157, 185, 252, 40,  46,  232, 112,
      137, 166, 61,  5,   67,  136, 32,  212, 172, 55,  58,  133, 72,  248, 101, 19,  65,  208, 134, 66,  76,  63,  178,
      207, 133, 20,  191, 48,  31,  116, 67,  233, 116, 119, 216, 17,  137, 201, 219, 181, 161, 114, 128, 41,  127, 0,
      226, 87,  43,  241, 2,   67,  136, 230, 104, 43,  178, 23,  155, 74,  139, 175, 226, 121, 135, 190, 227, 179, 148,
      188, 133, 209, 32,  230, 128, 158, 248, 146, 131, 226, 37,  168, 228, 48,  78,  112, 81,  137, 99,  0,   11,  184,
      126, 87,  179, 71,  24,  143, 200, 217, 48,  219, 152, 14,  204, 150, 156, 239, 220, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   59,  111, 23,  167, 180, 220, 191, 128, 50,  82,  173,
      69,  42,  215, 95,  171, 114, 210, 15,  149, 155, 35,  250, 250, 153, 208, 64,  191, 231, 232, 238, 153, 219, 188,
      23,  82,  252, 1,   50,  33,  38,  204, 169, 118, 30,  129, 33,  130, 239, 208, 153, 221, 94,  212, 87,  127, 156,
      109, 151, 176, 168, 41,  168, 46,  31,  228, 81,  201, 154, 113, 190, 201, 254, 169, 113, 205, 43,  157, 96,  138,
      118, 181, 233, 40,  173, 120, 198, 64,  96,  162, 175, 1,   62,  84,  231, 29,  29,  204, 201, 141, 253, 149, 186,
      176, 118, 197, 18,  131, 78,  198, 98,  80,  203, 133, 22,  34,  201, 120, 73,  93,  223, 128, 222, 213, 218, 66,
      252, 130, 12,  221, 124, 102, 80,  150, 57,  238, 38,  136, 183, 96,  8,   227, 52,  235, 62,  197, 12,  62,  25,
      78,  222, 91,  193, 140, 86,  210, 56,  187, 34,  222, 25,  0,   182, 117, 246, 232, 7,   79,  70,  47,  60,  233,
      194, 203, 13,  186, 15,  115, 17,  246, 130, 212, 105, 115, 142, 151, 7,   135, 115, 51,  241, 67,  228, 61,  204,
      208, 95,  149, 164, 146, 145, 161, 186, 108, 180, 50,  166, 70,  143, 95,  108, 114, 28,  127, 19,  69,  161, 156,
      86,  150, 147, 72,  97,  238, 172, 62,  216, 98,  5,   96,  57,  216, 204, 159, 43,  82,  104, 233, 56,  2,   55,
      148, 2,   80,  146, 132, 62,  76,  229, 59,  212, 236, 227, 1,   3,   217, 23,  36,  238, 155, 157, 254, 175, 45,
      228, 185, 102, 199, 43,  28,  72,  228, 171, 137, 9,   113, 215, 69,  26,  62,  138, 10,  10,  117, 9,   145, 125,
      216, 195, 111, 110, 154, 118, 36,  159, 155, 165, 198, 70,  10,  254, 245, 218, 93,  53,  105, 188, 86,  140, 204,
      9,   150, 234, 126, 157, 62,  41,  3,   22,  80,  190, 15,  81,  41,  69,  42,  124, 87,  21,  54,  119, 209, 48,
      215, 153, 94,  210, 139, 165, 171, 153, 70,  123, 51,  151, 0,   12,  222, 191, 144, 42,  5,   13,  71,  172, 73,
      92,  120, 213, 226, 46,  161, 63,  136, 2,   205, 123, 67,  112, 206, 176, 21,  28,  4,   29,  89,  45,  246, 65,
      204, 178, 175, 48,  20,  167, 54,  146, 37,  206, 91,  110, 195, 9,   179, 16,  69,  15,  209, 100, 60,  217, 178,
      159, 9,   25,  11,  154, 215, 138, 214, 248, 249, 217, 146, 123, 100, 50,  33,  86,  197, 115, 47,  30,  169, 162,
      121, 92,  21,  21,  140, 113, 28,  100, 153, 211, 106, 68,  21,  56,  54,  135, 155, 192, 105, 192, 97,  132, 105,
      132, 191, 244, 82,  141, 213, 97,  122, 62,  204, 112, 164, 24,  26,  11,  171, 173, 114, 233, 204, 125, 105, 36,
      123, 236, 221, 115, 7,   221, 4,   34,  69,  183, 99,  63,  135, 245, 14,  90,  236, 239, 201, 84,  167, 250, 83,
      254, 58,  4,   56,  253, 83,  53,  25,  234, 30,  122, 85,  242, 51,  113, 241, 242, 25,  8,   8,   70,  151, 252,
      84,  86,  27,  102, 111, 61,  235, 131, 171, 182, 48,  179, 75,  18,  168, 168, 190, 33,  21,  156, 215, 232, 103,
      10,  142, 199, 201, 118, 144, 163, 215, 146, 88,  181, 12,  63,  229, 61,  203, 120, 149, 158, 149, 66,  88,  4,
      116, 188, 126, 80,  76,  69,  70,  213, 230, 17,  43,  124, 165, 215, 38,  15,  124, 124, 191, 95,  125, 228, 74,
      234, 103, 244, 34,  196, 24,  70,  246, 248, 54,  126, 198, 229, 180, 217, 95,  148, 208, 187, 119, 181, 239, 194,
      206, 245, 16,  253, 20,  219, 9,   18,  59,  136, 233, 138, 145, 88,  162, 143, 210, 111, 226, 176, 172, 159, 248,
      2,   30,  31,  9,   229, 146, 142, 86,  240, 77,  102, 156, 225, 102, 114, 78,  19,  245, 237, 137, 133, 66,  110,
      204, 100, 3,   8,   161, 164, 38,  14,  21,  203, 152, 212, 129, 199, 189, 188, 13,  248, 223, 4,   26,  124, 253,
      239, 174, 84,  42,  43,  117, 113, 229, 120, 113, 164, 100, 4,   146, 49,  68,  4,   87,  102, 53,  43,  101, 86,
      148, 195, 21,  16,  88,  213, 122, 239, 97,  210, 223, 83,  237, 124, 104, 4,   184, 24,  193, 40,  108, 222, 254,
      103, 2,   134, 240, 221, 68,  72,  76,  247, 119, 238, 102, 9,   6,   43,  143, 151, 243, 34,  10,  254, 107, 211,
      233, 100, 234, 103, 31,  218, 170, 219, 242, 250, 186, 196, 208, 37,  107, 182, 62,  137, 248, 13,  241, 230, 104,
      40,  138, 231, 171, 213, 35,  104, 253, 195, 6,   26,  34,  133, 33,  195, 81,  186, 111, 9,   104, 86,  3,   91,
      96,  195, 157, 107, 148, 90,  135, 110, 104, 222, 37,  183, 10,  221, 150, 27,  243, 127, 69,  191, 126, 127, 208,
      65,  198, 50,  24,  49,  134, 131, 4,   241, 87,  75,  44,  248, 19,  86,  215, 200, 130, 20,  205, 86,  197, 156,
      8,   142, 109, 220, 75,  195, 157, 73,  201, 202, 80,  59,  242, 9,   8,   131, 153, 2,   245, 76,  38,  195, 197,
      157, 118, 50,  246, 44,  254, 33,  65,  31,  216, 187, 155, 35,  28,  238, 147, 175, 122, 246, 104, 188, 192, 81,
      55,  138, 165, 228, 126, 240, 88,  99,  22,  58,  133, 150, 59,  141, 35,  243, 66,  198, 245, 111, 229, 113, 246,
      248, 48,  155, 231, 170, 214, 76,  21,  208, 105, 140, 141, 93,  23,  187, 73,  140, 201, 46,  254, 174, 232, 206,
      80,  71,  35,  91,  217, 143, 167, 83,  89,  151, 233, 29,  170, 211, 87,  40,  98,  62,  161, 237, 32,  236, 65,
      48,  27,  162, 180, 7,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 30, 32}, {2, 1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 1, 1, 32, 32}, {2, 30, 32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape4_uint8_1) {
  uint8_t data[2 * 3 * 4 * 32] = {
      148, 135, 243, 39,  238, 232, 237, 101, 186, 112, 180, 123, 109, 64,  123, 101, 47,  159, 63,  69,  188, 123, 197,
      110, 164, 105, 80,  57,  21,  7,   239, 181, 12,  43,  107, 213, 56,  66,  189, 132, 136, 184, 153, 167, 150, 48,
      184, 216, 88,  203, 221, 46,  47,  249, 106, 106, 123, 44,  186, 75,  132, 17,  102, 97,  173, 140, 125, 194, 47,
      176, 0,   89,  193, 206, 217, 203, 226, 25,  230, 233, 218, 100, 224, 90,  202, 18,  82,  61,  153, 204, 90,  76,
      173, 85,  153, 28,  10,  196, 150, 120, 179, 220, 115, 228, 143, 233, 80,  25,  40,  87,  171, 28,  54,  114, 52,
      18,  51,  153, 214, 214, 242, 103, 59,  173, 29,  172, 154, 97,  85,  136, 120, 131, 150, 96,  158, 90,  206, 105,
      90,  155, 117, 106, 3,   90,  184, 127, 248, 163, 147, 222, 112, 5,   154, 194, 82,  40,  210, 79,  188, 67,  168,
      19,  181, 109, 168, 95,  26,  149, 154, 70,  21,  198, 177, 81,  144, 137, 221, 140, 164, 126, 138, 242, 219, 8,
      111, 232, 145, 69,  180, 118, 49,  101, 240, 155, 141, 197, 241, 128, 214, 175, 126, 214, 167, 21,  30,  122, 159,
      180, 228, 180, 198, 31,  75,  56,  81,  213, 181, 112, 97,  60,  138, 29,  21,  173, 98,  184, 181, 39,  170, 151,
      143, 64,  189, 179, 124, 216, 178, 196, 206, 182, 239, 77,  240, 53,  109, 206, 7,   173, 120, 8,   166, 128, 65,
      180, 10,  36,  252, 144, 65,  62,  22,  149, 85,  133, 136, 149, 172, 14,  121, 112, 187, 87,  212, 171, 222, 205,
      23,  29,  123, 86,  54,  59,  166, 111, 250, 101, 165, 229, 20,  194, 106, 100, 144, 147, 78,  211, 203, 202, 73,
      29,  193, 207, 107, 209, 48,  159, 133, 203, 135, 86,  228, 158, 219, 22,  229, 194, 215, 58,  137, 79,  137, 198,
      224, 200, 140, 65,  88,  20,  108, 237, 21,  251, 199, 138, 222, 254, 53,  107, 154, 227, 25,  96,  72,  219, 96,
      224, 165, 22,  100, 89,  174, 32,  107, 209, 46,  39,  231, 163, 157, 184, 89,  243, 18,  123, 254, 153, 77,  174,
      6,   204, 140, 63,  172, 75,  69,  110, 150, 87,  12,  15,  180, 57,  193, 196, 193, 170, 34,  30,  87,  167, 25,
      219, 114, 179, 113, 79,  138, 199, 138, 244, 33,  125, 240, 201, 56,  93,  52,  222, 51,  57,  247, 73,  150, 234,
      47,  250, 39,  36,  63,  19,  236, 128, 206, 67,  29,  74,  124, 246, 154, 142, 41,  6,   44,  43,  165, 135, 94,
      249, 240, 122, 117, 160, 95,  186, 104, 158, 66,  133, 112, 15,  173, 212, 77,  231, 203, 253, 237, 210, 95,  203,
      63,  193, 93,  144, 14,  137, 131, 222, 110, 249, 195, 168, 238, 230, 44,  112, 216, 254, 83,  217, 142, 168, 109,
      161, 5,   4,   30,  40,  251, 144, 88,  140, 49,  127, 254, 254, 120, 174, 204, 210, 144, 93,  122, 185, 158, 64,
      99,  140, 119, 5,   15,  31,  100, 152, 202, 45,  228, 112, 1,   75,  147, 168, 111, 72,  185, 174, 100, 111, 242,
      67,  18,  226, 172, 132, 2,   112, 130, 82,  6,   32,  126, 81,  149, 254, 23,  177, 56,  51,  232, 183, 182, 12,
      162, 144, 150, 205, 40,  250, 17,  226, 36,  44,  166, 207, 47,  32,  205, 15,  37,  167, 129, 97,  55,  232, 99,
      122, 85,  19,  16,  218, 161, 38,  197, 133, 124, 85,  39,  176, 149, 247, 78,  163, 67,  139, 218, 57,  151, 60,
      242, 184, 115, 79,  198, 98,  176, 175, 130, 116, 118, 150, 245, 213, 228, 217, 56,  237, 214, 196, 197, 223, 243,
      71,  209, 159, 153, 199, 48,  168, 195, 107, 2,   4,   24,  67,  201, 65,  216, 135, 89,  57,  151, 28,  225, 154,
      252, 153, 157, 60,  46,  126, 134, 212, 237, 233, 176, 2,   131, 111, 124, 245, 216, 209, 23,  244, 228, 190, 140,
      155, 102, 121, 113, 103, 130, 154, 189, 119, 205, 89,  169, 58,  195, 15,  11,  107, 253, 214, 201, 201, 209, 199,
      52,  214, 46,  97,  98,  21,  46,  61,  188, 200, 138, 200, 125, 154, 123, 98,  97,  121, 56,  201, 47,  134, 35,
      181, 164, 61,  126, 152, 29,  122, 16,  119, 70,  181, 142, 217, 117, 34,  144, 224, 26,  152, 58,  31,  138, 5,
      89,  130, 172, 158, 199, 87,  175, 220, 185, 27,  170, 126, 34,  163, 14,  130, 158, 175, 249, 87,  190, 139, 200,
      41,  222, 126, 200, 147, 14,  32,  193, 211,
  };
  uint8_t ret[2 * 3 * 1 * 1 * 32 * 32] = {
      148, 135, 243, 39,  238, 232, 237, 101, 186, 112, 180, 123, 109, 64,  123, 101, 47,  159, 63,  69,  188, 123, 197,
      110, 164, 105, 80,  57,  21,  7,   239, 181, 12,  43,  107, 213, 56,  66,  189, 132, 136, 184, 153, 167, 150, 48,
      184, 216, 88,  203, 221, 46,  47,  249, 106, 106, 123, 44,  186, 75,  132, 17,  102, 97,  173, 140, 125, 194, 47,
      176, 0,   89,  193, 206, 217, 203, 226, 25,  230, 233, 218, 100, 224, 90,  202, 18,  82,  61,  153, 204, 90,  76,
      173, 85,  153, 28,  10,  196, 150, 120, 179, 220, 115, 228, 143, 233, 80,  25,  40,  87,  171, 28,  54,  114, 52,
      18,  51,  153, 214, 214, 242, 103, 59,  173, 29,  172, 154, 97,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   85,  136, 120, 131, 150, 96,  158, 90,  206, 105, 90,
      155, 117, 106, 3,   90,  184, 127, 248, 163, 147, 222, 112, 5,   154, 194, 82,  40,  210, 79,  188, 67,  168, 19,
      181, 109, 168, 95,  26,  149, 154, 70,  21,  198, 177, 81,  144, 137, 221, 140, 164, 126, 138, 242, 219, 8,   111,
      232, 145, 69,  180, 118, 49,  101, 240, 155, 141, 197, 241, 128, 214, 175, 126, 214, 167, 21,  30,  122, 159, 180,
      228, 180, 198, 31,  75,  56,  81,  213, 181, 112, 97,  60,  138, 29,  21,  173, 98,  184, 181, 39,  170, 151, 143,
      64,  189, 179, 124, 216, 178, 196, 206, 182, 239, 77,  240, 53,  109, 206, 7,   173, 120, 8,   166, 128, 65,  180,
      10,  36,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   252, 144, 65,  62,  22,  149, 85,  133, 136, 149, 172, 14,  121, 112, 187, 87,  212, 171, 222, 205, 23,  29,
      123, 86,  54,  59,  166, 111, 250, 101, 165, 229, 20,  194, 106, 100, 144, 147, 78,  211, 203, 202, 73,  29,  193,
      207, 107, 209, 48,  159, 133, 203, 135, 86,  228, 158, 219, 22,  229, 194, 215, 58,  137, 79,  137, 198, 224, 200,
      140, 65,  88,  20,  108, 237, 21,  251, 199, 138, 222, 254, 53,  107, 154, 227, 25,  96,  72,  219, 96,  224, 165,
      22,  100, 89,  174, 32,  107, 209, 46,  39,  231, 163, 157, 184, 89,  243, 18,  123, 254, 153, 77,  174, 6,   204,
      140, 63,  172, 75,  69,  110, 150, 87,  12,  15,  180, 57,  193, 196, 0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   193, 170, 34,  30,  87,  167, 25,  219, 114, 179,
      113, 79,  138, 199, 138, 244, 33,  125, 240, 201, 56,  93,  52,  222, 51,  57,  247, 73,  150, 234, 47,  250, 39,
      36,  63,  19,  236, 128, 206, 67,  29,  74,  124, 246, 154, 142, 41,  6,   44,  43,  165, 135, 94,  249, 240, 122,
      117, 160, 95,  186, 104, 158, 66,  133, 112, 15,  173, 212, 77,  231, 203, 253, 237, 210, 95,  203, 63,  193, 93,
      144, 14,  137, 131, 222, 110, 249, 195, 168, 238, 230, 44,  112, 216, 254, 83,  217, 142, 168, 109, 161, 5,   4,
      30,  40,  251, 144, 88,  140, 49,  127, 254, 254, 120, 174, 204, 210, 144, 93,  122, 185, 158, 64,  99,  140, 119,
      5,   15,  31,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   100, 152, 202, 45,  228, 112, 1,   75,  147, 168, 111, 72,  185, 174, 100, 111, 242, 67,  18,  226, 172,
      132, 2,   112, 130, 82,  6,   32,  126, 81,  149, 254, 23,  177, 56,  51,  232, 183, 182, 12,  162, 144, 150, 205,
      40,  250, 17,  226, 36,  44,  166, 207, 47,  32,  205, 15,  37,  167, 129, 97,  55,  232, 99,  122, 85,  19,  16,
      218, 161, 38,  197, 133, 124, 85,  39,  176, 149, 247, 78,  163, 67,  139, 218, 57,  151, 60,  242, 184, 115, 79,
      198, 98,  176, 175, 130, 116, 118, 150, 245, 213, 228, 217, 56,  237, 214, 196, 197, 223, 243, 71,  209, 159, 153,
      199, 48,  168, 195, 107, 2,   4,   24,  67,  201, 65,  216, 135, 89,  57,  0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   151, 28,  225, 154, 252, 153, 157, 60,  46,
      126, 134, 212, 237, 233, 176, 2,   131, 111, 124, 245, 216, 209, 23,  244, 228, 190, 140, 155, 102, 121, 113, 103,
      130, 154, 189, 119, 205, 89,  169, 58,  195, 15,  11,  107, 253, 214, 201, 201, 209, 199, 52,  214, 46,  97,  98,
      21,  46,  61,  188, 200, 138, 200, 125, 154, 123, 98,  97,  121, 56,  201, 47,  134, 35,  181, 164, 61,  126, 152,
      29,  122, 16,  119, 70,  181, 142, 217, 117, 34,  144, 224, 26,  152, 58,  31,  138, 5,   89,  130, 172, 158, 199,
      87,  175, 220, 185, 27,  170, 126, 34,  163, 14,  130, 158, 175, 249, 87,  190, 139, 200, 41,  222, 126, 200, 147,
      14,  32,  193, 211, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 3, 4, 32}, {2, 3, 1, 1, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 3, 1, 1, 32, 32}, {2, 3, 4, 32}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape4_uint8_2) {
  uint8_t data[2 * 3 * 4 * 33] = {
      18,  158, 60,  43,  108, 88,  198, 190, 25,  94,  196, 98,  41,  45,  64,  161, 136, 109, 60,  6,   165, 120, 9,
      65,  99,  106, 141, 0,   119, 100, 60,  35,  111, 178, 104, 158, 221, 115, 103, 85,  223, 231, 149, 174, 238, 120,
      35,  53,  53,  134, 89,  253, 123, 19,  75,  78,  174, 231, 196, 87,  74,  134, 69,  230, 237, 12,  162, 210, 182,
      194, 10,  102, 131, 240, 110, 69,  0,   98,  112, 180, 39,  8,   109, 57,  163, 136, 177, 133, 223, 146, 128, 128,
      173, 100, 83,  226, 16,  17,  46,  196, 116, 165, 65,  66,  193, 99,  214, 47,  199, 226, 233, 7,   250, 215, 133,
      104, 29,  20,  54,  1,   42,  231, 49,  48,  116, 214, 52,  11,  165, 164, 168, 230, 26,  135, 110, 134, 140, 125,
      214, 204, 231, 57,  193, 44,  101, 245, 81,  29,  84,  76,  60,  234, 59,  53,  138, 132, 44,  238, 22,  18,  80,
      72,  84,  178, 222, 53,  44,  87,  19,  196, 112, 58,  237, 201, 203, 59,  218, 75,  105, 234, 95,  175, 36,  64,
      96,  12,  74,  56,  7,   171, 235, 138, 60,  243, 226, 242, 61,  116, 164, 185, 52,  82,  154, 160, 16,  47,  23,
      214, 173, 82,  144, 210, 144, 150, 38,  236, 51,  49,  205, 79,  221, 180, 216, 196, 233, 149, 81,  68,  51,  233,
      94,  219, 175, 24,  207, 205, 130, 108, 213, 31,  128, 41,  142, 7,   82,  133, 207, 9,   224, 128, 214, 24,  76,
      172, 228, 139, 33,  168, 9,   127, 187, 196, 121, 78,  201, 240, 18,  157, 203, 244, 157, 38,  246, 231, 94,  29,
      251, 18,  186, 33,  108, 212, 212, 100, 95,  16,  69,  163, 36,  155, 178, 68,  102, 8,   174, 123, 101, 88,  51,
      112, 237, 39,  50,  237, 64,  136, 5,   144, 183, 11,  81,  115, 248, 165, 196, 91,  3,   185, 126, 38,  25,  102,
      203, 238, 174, 156, 36,  53,  90,  168, 240, 77,  145, 20,  100, 197, 157, 183, 91,  116, 165, 209, 142, 212, 211,
      150, 20,  20,  38,  149, 220, 218, 171, 134, 18,  184, 105, 9,   192, 243, 140, 134, 111, 55,  161, 236, 211, 115,
      58,  159, 114, 211, 53,  234, 82,  38,  38,  112, 227, 159, 210, 129, 61,  249, 64,  31,  136, 110, 254, 226, 10,
      223, 223, 241, 192, 160, 231, 207, 151, 35,  41,  244, 154, 129, 127, 32,  173, 113, 111, 42,  221, 73,  141, 72,
      196, 90,  41,  115, 220, 207, 123, 89,  210, 119, 133, 5,   3,   70,  71,  0,   88,  134, 182, 152, 12,  223, 179,
      101, 100, 92,  195, 190, 253, 230, 218, 215, 164, 92,  50,  191, 50,  152, 171, 226, 207, 74,  154, 213, 139, 26,
      60,  59,  121, 177, 229, 139, 52,  203, 111, 120, 53,  109, 35,  177, 59,  254, 188, 185, 189, 81,  233, 223, 164,
      26,  143, 125, 65,  41,  243, 231, 96,  174, 157, 30,  106, 78,  185, 252, 11,  98,  19,  34,  119, 34,  240, 141,
      39,  189, 48,  149, 166, 176, 2,   142, 185, 231, 239, 49,  188, 234, 77,  213, 99,  249, 169, 165, 153, 100, 249,
      161, 9,   101, 41,  141, 182, 162, 241, 58,  129, 177, 37,  233, 97,  163, 43,  24,  254, 34,  49,  165, 94,  36,
      47,  19,  32,  85,  162, 190, 153, 183, 135, 204, 91,  79,  45,  72,  26,  19,  197, 179, 246, 241, 27,  141, 177,
      9,   8,   140, 112, 212, 5,   197, 86,  2,   170, 125, 179, 138, 240, 204, 99,  59,  190, 65,  113, 181, 166, 159,
      40,  154, 81,  12,  141, 122, 185, 220, 203, 22,  82,  105, 146, 52,  118, 16,  10,  99,  183, 103, 18,  170, 142,
      204, 49,  73,  250, 61,  169, 243, 85,  203, 17,  170, 133, 171, 179, 237, 163, 131, 150, 71,  171, 120, 213, 3,
      147, 138, 223, 171, 235, 51,  5,   155, 19,  241, 253, 152, 19,  44,  250, 110, 244, 211, 170, 226, 44,  181, 208,
      68,  143, 94,  85,  229, 211, 16,  23,  219, 94,  35,  159, 63,  208, 207, 7,   189, 254, 207, 38,  6,   105, 92,
      104, 73,  156, 219, 191, 108, 99,  60,  49,  42,  4,   245, 158, 239, 131, 42,  206, 187, 214, 73,  138, 59,  85,
      54,  100, 38,  133, 182, 157, 187, 150, 4,   78,  120, 22,  19,  119, 91,  52,  156, 127, 9,   93,  6,   172, 209,
      114, 249, 190, 67,  235, 169, 133, 125, 66,  214, 234, 146, 219, 149, 193, 150, 35,  56,  98,  38,  233, 125, 88,
      89,  73,  146, 230, 47,  159, 52,  31,  23,  164, 103, 250, 228, 57,  25,  2,   219, 56,  122, 58,  190, 232, 120,
      205, 35,  25,  76,  182, 69,  137, 27,  5,   12,
  };
  uint8_t ret[2 * 3 * 1 * 2 * 32 * 32] = {
      18,  158, 60,  43,  108, 88,  198, 190, 25,  94,  196, 98,  41,  45,  64,  161, 136, 109, 60,  6,   165, 120, 9,
      65,  99,  106, 141, 0,   119, 100, 60,  35,  178, 104, 158, 221, 115, 103, 85,  223, 231, 149, 174, 238, 120, 35,
      53,  53,  134, 89,  253, 123, 19,  75,  78,  174, 231, 196, 87,  74,  134, 69,  230, 237, 162, 210, 182, 194, 10,
      102, 131, 240, 110, 69,  0,   98,  112, 180, 39,  8,   109, 57,  163, 136, 177, 133, 223, 146, 128, 128, 173, 100,
      83,  226, 16,  17,  196, 116, 165, 65,  66,  193, 99,  214, 47,  199, 226, 233, 7,   250, 215, 133, 104, 29,  20,
      54,  1,   42,  231, 49,  48,  116, 214, 52,  11,  165, 164, 168, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   111, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   12,  0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   46,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   230, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   26,  135, 110, 134, 140, 125, 214, 204, 231, 57,  193, 44,  101, 245, 81,  29,  84,  76,  60,  234, 59,  53,
      138, 132, 44,  238, 22,  18,  80,  72,  84,  178, 53,  44,  87,  19,  196, 112, 58,  237, 201, 203, 59,  218, 75,
      105, 234, 95,  175, 36,  64,  96,  12,  74,  56,  7,   171, 235, 138, 60,  243, 226, 242, 61,  164, 185, 52,  82,
      154, 160, 16,  47,  23,  214, 173, 82,  144, 210, 144, 150, 38,  236, 51,  49,  205, 79,  221, 180, 216, 196, 233,
      149, 81,  68,  51,  233, 219, 175, 24,  207, 205, 130, 108, 213, 31,  128, 41,  142, 7,   82,  133, 207, 9,   224,
      128, 214, 24,  76,  172, 228, 139, 33,  168, 9,   127, 187, 196, 121, 0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   222, 0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   116,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   94,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   78,  0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   201, 240, 18,  157, 203, 244, 157, 38,  246, 231, 94,  29,  251, 18,  186, 33,  108, 212, 212, 100, 95,
      16,  69,  163, 36,  155, 178, 68,  102, 8,   174, 123, 88,  51,  112, 237, 39,  50,  237, 64,  136, 5,   144, 183,
      11,  81,  115, 248, 165, 196, 91,  3,   185, 126, 38,  25,  102, 203, 238, 174, 156, 36,  53,  90,  240, 77,  145,
      20,  100, 197, 157, 183, 91,  116, 165, 209, 142, 212, 211, 150, 20,  20,  38,  149, 220, 218, 171, 134, 18,  184,
      105, 9,   192, 243, 140, 134, 55,  161, 236, 211, 115, 58,  159, 114, 211, 53,  234, 82,  38,  38,  112, 227, 159,
      210, 129, 61,  249, 64,  31,  136, 110, 254, 226, 10,  223, 223, 241, 192, 0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   101, 0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      168, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   111, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   160, 0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   231, 207, 151, 35,  41,  244, 154, 129, 127, 32,  173, 113, 111, 42,  221, 73,  141, 72,  196, 90,
      41,  115, 220, 207, 123, 89,  210, 119, 133, 5,   3,   70,  0,   88,  134, 182, 152, 12,  223, 179, 101, 100, 92,
      195, 190, 253, 230, 218, 215, 164, 92,  50,  191, 50,  152, 171, 226, 207, 74,  154, 213, 139, 26,  60,  121, 177,
      229, 139, 52,  203, 111, 120, 53,  109, 35,  177, 59,  254, 188, 185, 189, 81,  233, 223, 164, 26,  143, 125, 65,
      41,  243, 231, 96,  174, 157, 30,  78,  185, 252, 11,  98,  19,  34,  119, 34,  240, 141, 39,  189, 48,  149, 166,
      176, 2,   142, 185, 231, 239, 49,  188, 234, 77,  213, 99,  249, 169, 165, 153, 0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   71,  0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   59,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   106, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   100, 0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   249, 161, 9,   101, 41,  141, 182, 162, 241, 58,  129, 177, 37,  233, 97,  163, 43,  24,  254,
      34,  49,  165, 94,  36,  47,  19,  32,  85,  162, 190, 153, 183, 204, 91,  79,  45,  72,  26,  19,  197, 179, 246,
      241, 27,  141, 177, 9,   8,   140, 112, 212, 5,   197, 86,  2,   170, 125, 179, 138, 240, 204, 99,  59,  190, 113,
      181, 166, 159, 40,  154, 81,  12,  141, 122, 185, 220, 203, 22,  82,  105, 146, 52,  118, 16,  10,  99,  183, 103,
      18,  170, 142, 204, 49,  73,  250, 61,  243, 85,  203, 17,  170, 133, 171, 179, 237, 163, 131, 150, 71,  171, 120,
      213, 3,   147, 138, 223, 171, 235, 51,  5,   155, 19,  241, 253, 152, 19,  44,  250, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   135, 0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   65,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   169, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   110, 0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   244, 211, 170, 226, 44,  181, 208, 68,  143, 94,  85,  229, 211, 16,  23,  219, 94,  35,
      159, 63,  208, 207, 7,   189, 254, 207, 38,  6,   105, 92,  104, 73,  219, 191, 108, 99,  60,  49,  42,  4,   245,
      158, 239, 131, 42,  206, 187, 214, 73,  138, 59,  85,  54,  100, 38,  133, 182, 157, 187, 150, 4,   78,  120, 22,
      119, 91,  52,  156, 127, 9,   93,  6,   172, 209, 114, 249, 190, 67,  235, 169, 133, 125, 66,  214, 234, 146, 219,
      149, 193, 150, 35,  56,  98,  38,  233, 125, 89,  73,  146, 230, 47,  159, 52,  31,  23,  164, 103, 250, 228, 57,
      25,  2,   219, 56,  122, 58,  190, 232, 120, 205, 35,  25,  76,  182, 69,  137, 27,  5,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   156, 0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   19,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   88,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   12,  0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 3, 4, 33}, {2, 3, 1, 2, 32, 32}, DT_UINT8};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]));
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 3, 1, 2, 32, 32}, {2, 3, 4, 33}, DT_UINT8};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]));
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint8_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape1_fp16_1) {
  uint16_t data[1] = {14805};
  uint16_t ret[1 * 1 * 16 * 16] = {
      14805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 16, 16}, {1}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape1_fp16_2) {
  uint16_t data[15] = {
      13976, 13979, 13424, 13692, 14268, 13703, 14220, 13135, 13693, 13965, 12067, 14261, 14716, 14975, 13763,
  };

  uint16_t ret[1 * 1 * 16 * 16] = {
      13976, 13979, 13424, 13692, 14268, 13703, 14220, 13135, 13693, 13965, 12067, 14261, 14716, 14975, 13763, 0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, 0, 0,
      0,     0,     0,     0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {15}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 16, 16}, {15}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape2_fp16_lt_cube) {
  uint16_t data[1 * 16] = {
      15300, 13152, 14880, 15296, 14710, 13100, 13380, 15207, 15273, 13920, 14607, 13777, 14943, 14517, 15138, 15198,
  };
  uint16_t ret[1 * 1 * 16 * 16] = {
      15300, 13152, 14880, 15296, 14710, 13100, 13380, 15207, 15273, 13920, 14607, 13777, 14943, 14517, 15138, 15198,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1, 16}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 16, 16}, {1, 16}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape2_fp16_bt_cube) {
  uint16_t data[15 * 17] = {
      13136, 13938, 13692, 14295, 15066, 15291, 14157, 14975, 14355, 15311, 12473, 13320, 13125, 13649, 13016, 15193,
      11689, 13992, 13147, 15051, 14496, 11768, 15080, 14341, 14215, 12872, 12580, 14679, 14670, 15058, 11421, 12526,
      14768, 14792, 13796, 14983, 15175, 14399, 14858, 12314, 11303, 15151, 14493, 15153, 14328, 13337, 11597, 14341,
      14482, 14325, 13750, 12838, 12433, 13391, 14811, 15346, 13415, 14518, 13790, 14547, 10431, 14110, 15298, 14310,
      12360, 12432, 13530, 14788, 11648, 13664, 14697, 14219, 13649, 14621, 14898, 14588, 13875, 14302, 14599, 14620,
      14884, 14977, 14728, 14506, 14855, 15326, 13580, 14575, 14426, 15284, 12298, 13859, 13743, 14833, 15096, 10690,
      13315, 13237, 13799, 14673, 13948, 14728, 13372, 15186, 15013, 14558, 15144, 14004, 14390, 14773, 14941, 15133,
      14678, 13959, 12531, 13905, 12597, 14344, 14513, 11837, 13348, 14198, 14936, 15120, 13568, 12183, 13921, 14910,
      13254, 11297, 14298, 14729, 12965, 13326, 15005, 13947, 15095, 12504, 14994, 15355, 14176, 12754, 13388, 14572,
      13598, 15154, 14542, 2456,  13328, 14108, 12614, 14357, 14524, 14887, 14628, 14856, 14437, 14022, 14686, 10009,
      12263, 14832, 14516, 14331, 14472, 14569, 12931, 14562, 14404, 14582, 14079, 14079, 11643, 12625, 13684, 12119,
      14728, 14379, 14513, 14384, 14791, 7282,  10282, 14394, 14584, 12495, 15004, 8552,  13711, 15079, 14360, 12401,
      14452, 12655, 14601, 11849, 14306, 13585, 10584, 14535, 11525, 14830, 13127, 13605, 13200, 14650, 13011, 12334,
      14387, 14501, 12816, 14917, 13389, 14660, 14716, 13227, 13387, 14959, 13128, 7764,  13873, 13452, 14378, 13317,
      14482, 13781, 11235, 12167, 15153, 14285, 13952, 14930, 15093, 14145, 14392, 15038, 14442, 13980, 14247, 12048,
      14542, 15012, 12545, 13550, 9689,  14928, 13519, 14253, 15310, 4717,  14838, 15210, 14477, 14316, 12144,
  };
  uint16_t ret[1 * 2 * 16 * 16] = {
      13136, 13938, 13692, 14295, 15066, 15291, 14157, 14975, 14355, 15311, 12473, 13320, 13125, 13649, 13016, 15193,
      13992, 13147, 15051, 14496, 11768, 15080, 14341, 14215, 12872, 12580, 14679, 14670, 15058, 11421, 12526, 14768,
      13796, 14983, 15175, 14399, 14858, 12314, 11303, 15151, 14493, 15153, 14328, 13337, 11597, 14341, 14482, 14325,
      12838, 12433, 13391, 14811, 15346, 13415, 14518, 13790, 14547, 10431, 14110, 15298, 14310, 12360, 12432, 13530,
      11648, 13664, 14697, 14219, 13649, 14621, 14898, 14588, 13875, 14302, 14599, 14620, 14884, 14977, 14728, 14506,
      15326, 13580, 14575, 14426, 15284, 12298, 13859, 13743, 14833, 15096, 10690, 13315, 13237, 13799, 14673, 13948,
      13372, 15186, 15013, 14558, 15144, 14004, 14390, 14773, 14941, 15133, 14678, 13959, 12531, 13905, 12597, 14344,
      11837, 13348, 14198, 14936, 15120, 13568, 12183, 13921, 14910, 13254, 11297, 14298, 14729, 12965, 13326, 15005,
      15095, 12504, 14994, 15355, 14176, 12754, 13388, 14572, 13598, 15154, 14542, 2456,  13328, 14108, 12614, 14357,
      14887, 14628, 14856, 14437, 14022, 14686, 10009, 12263, 14832, 14516, 14331, 14472, 14569, 12931, 14562, 14404,
      14079, 14079, 11643, 12625, 13684, 12119, 14728, 14379, 14513, 14384, 14791, 7282,  10282, 14394, 14584, 12495,
      8552,  13711, 15079, 14360, 12401, 14452, 12655, 14601, 11849, 14306, 13585, 10584, 14535, 11525, 14830, 13127,
      13200, 14650, 13011, 12334, 14387, 14501, 12816, 14917, 13389, 14660, 14716, 13227, 13387, 14959, 13128, 7764,
      13452, 14378, 13317, 14482, 13781, 11235, 12167, 15153, 14285, 13952, 14930, 15093, 14145, 14392, 15038, 14442,
      14247, 12048, 14542, 15012, 12545, 13550, 9689,  14928, 13519, 14253, 15310, 4717,  14838, 15210, 14477, 14316,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      11689, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14792, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13750, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14788, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14855, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14728, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14513, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13947, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14524, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14582, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15004, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13605, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13873, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13980, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12144, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {15, 17}, {1, 2, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 2, 16, 16}, {15, 17}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape3_fp16) {
  uint16_t data[2 * 4 * 17] = {
      14356, 14196, 13985, 15033, 14593, 13229, 15318, 14470, 14100, 14818, 14847, 14989, 13011, 14733, 10638, 12097,
      15335, 10990, 14628, 14757, 15124, 14145, 10114, 14396, 15245, 14402, 15193, 11308, 14658, 14565, 15185, 14891,
      15020, 13353, 15346, 13820, 11782, 14436, 11308, 12817, 13936, 15058, 14104, 13169, 13833, 15175, 9882,  11003,
      15219, 14533, 14894, 13845, 8417,  15160, 13856, 15086, 14683, 15158, 14653, 13931, 14588, 13947, 15046, 14568,
      12336, 15339, 14343, 8727,  13185, 14113, 14384, 13943, 15189, 15323, 12386, 13539, 14971, 12917, 12787, 13738,
      11293, 14121, 14757, 15202, 14586, 12485, 14816, 14622, 14352, 14774, 12407, 14750, 14368, 14650, 14876, 15086,
      14808, 13749, 13358, 14550, 14031, 13210, 15228, 8667,  14913, 15138, 14055, 14865, 15290, 14167, 13875, 14433,
      15156, 13546, 15023, 13825, 14349, 13734, 14023, 14934, 11822, 14858, 14871, 13453, 14480, 13670, 13346, 11262,
      15088, 13484, 15274, 13007, 12458, 13530, 14978, 15155,
  };
  uint16_t ret[2 * 1 * 2 * 16 * 16] = {
      14356, 14196, 13985, 15033, 14593, 13229, 15318, 14470, 14100, 14818, 14847, 14989, 13011, 14733, 10638, 12097,
      10990, 14628, 14757, 15124, 14145, 10114, 14396, 15245, 14402, 15193, 11308, 14658, 14565, 15185, 14891, 15020,
      15346, 13820, 11782, 14436, 11308, 12817, 13936, 15058, 14104, 13169, 13833, 15175, 9882,  11003, 15219, 14533,
      13845, 8417,  15160, 13856, 15086, 14683, 15158, 14653, 13931, 14588, 13947, 15046, 14568, 12336, 15339, 14343,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15335, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13353, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14894, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      8727,  0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13185, 14113, 14384, 13943, 15189, 15323, 12386, 13539, 14971, 12917, 12787, 13738, 11293, 14121, 14757, 15202,
      12485, 14816, 14622, 14352, 14774, 12407, 14750, 14368, 14650, 14876, 15086, 14808, 13749, 13358, 14550, 14031,
      15228, 8667,  14913, 15138, 14055, 14865, 15290, 14167, 13875, 14433, 15156, 13546, 15023, 13825, 14349, 13734,
      14934, 11822, 14858, 14871, 13453, 14480, 13670, 13346, 11262, 15088, 13484, 15274, 13007, 12458, 13530, 14978,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14586, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13210, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14023, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15155, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  };

  FormatTransferFractalZz transfer;
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 4, 17}, {2, 1, 2, 16, 16}, DT_FLOAT16};
  TransResult result;
  EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }

  FormatTransferFractalZzND transfer2;
  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 1, 2, 16, 16}, {2, 4, 17}, DT_FLOAT16};
  TransResult result2;
  EXPECT_EQ(transfer2.TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp16_1) {
  uint16_t data[1 * 1 * 17 * 4] = {
      15326, 14638, 15204, 11500, 13867, 13869, 14727, 13806, 14006, 13821, 14019, 14505, 11796, 11517,
      14469, 13619, 14439, 14777, 14089, 14677, 13678, 15328, 11413, 14218, 14677, 14790, 13502, 13417,
      14288, 14807, 13460, 14627, 14607, 12875, 13632, 13706, 14012, 14699, 12040, 13948, 14099, 13854,
      11998, 14920, 14080, 13218, 10556, 15298, 15131, 14444, 10388, 15036, 13989, 14702, 14443, 14180,
      14565, 12548, 15124, 14783, 13679, 14072, 13832, 13606, 11777, 11673, 14339, 13487,
  };
  uint16_t ret[1 * 1 * 2 * 1 * 16 * 16] = {
      15326, 14638, 15204, 11500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13867, 13869, 14727, 13806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14006, 13821, 14019, 14505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11796, 11517, 14469, 13619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14439, 14777, 14089, 14677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13678, 15328, 11413, 14218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14677, 14790, 13502, 13417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14288, 14807, 13460, 14627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14607, 12875, 13632, 13706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14012, 14699, 12040, 13948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14099, 13854, 11998, 14920, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14080, 13218, 10556, 15298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15131, 14444, 10388, 15036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13989, 14702, 14443, 14180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14565, 12548, 15124, 14783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13679, 14072, 13832, 13606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11777, 11673, 14339, 13487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {1, 1, 17, 4}, {1, 1, 2, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {1, 1, 2, 1, 16, 16}, {1, 1, 17, 4}, DT_FLOAT16};
  TransResult result2;
  FormatTransferFractalZzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
  EXPECT_EQ(
      transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape),
      UNSUPPORTED);
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp16) {
  uint16_t data[2 * 2 * 17 * 4] = {
      13717, 14633, 13393, 15273, 14219, 14977, 15129, 15049, 15185, 14727, 14121, 13586, 10579, 15226, 15260, 11991,
      15078, 14415, 14178, 15075, 12726, 14277, 10874, 9451,  12911, 11791, 15013, 12924, 15180, 13784, 7774,  15348,
      14477, 14247, 14523, 15246, 14223, 14805, 14335, 12387, 9019,  15012, 15220, 15254, 11593, 13539, 14436, 14677,
      12538, 13629, 15131, 14448, 13915, 12483, 14604, 7842,  14802, 14612, 15327, 12582, 13820, 14096, 12041, 15051,
      14481, 14387, 14791, 11639, 14035, 14968, 15245, 13959, 15076, 14043, 15351, 13718, 14065, 11168, 14670, 13385,
      14415, 10126, 14327, 12871, 13278, 14263, 13842, 13420, 14813, 15179, 15201, 12669, 10909, 13404, 15012, 14775,
      14167, 14296, 14659, 14999, 8257,  15345, 11292, 14284, 14388, 14215, 14899, 13700, 15117, 11280, 14407, 15226,
      14659, 14238, 9645,  14763, 14259, 11179, 14093, 15064, 14546, 10329, 14517, 11502, 11346, 14389, 15343, 13370,
      15305, 14455, 15170, 12374, 15135, 13232, 11257, 13393, 13192, 14629, 13648, 15159, 14576, 13830, 14427, 14739,
      12837, 13978, 14633, 15185, 14971, 11183, 15123, 14586, 12630, 14836, 14897, 13545, 14842, 14514, 14407, 12336,
      15142, 15291, 14817, 13495, 15149, 15219, 15302, 14088, 9507,  12779, 14672, 12172, 14361, 9038,  10286, 11767,
      11743, 14965, 14847, 14598, 14362, 13553, 14834, 15149, 15325, 14845, 13870, 15102, 14942, 15359, 14904, 15034,
      9360,  13457, 13630, 12647, 13767, 15264, 13700, 12651, 14721, 14055, 15035, 14461, 13251, 13468, 15235, 14382,
      14905, 14092, 12383, 14141, 15303, 12123, 14006, 14228, 15136, 13119, 14391, 14624, 13095, 14981, 14994, 12624,
      14894, 12580, 13922, 15265, 12878, 14602, 14165, 14303, 11757, 15331, 15343, 15149, 13209, 11594, 15247, 14459,
      13118, 12868, 13982, 11374, 13367, 14585, 13846, 15319, 14810, 13662, 12718, 13320, 14489, 12071, 13509, 15225,
      14608, 14576, 13899, 14718, 14972, 13522, 12321, 11909, 13750, 14365, 14762, 14729, 12767, 14197, 13849, 12160,
  };
  uint16_t ret[2 * 2 * 2 * 1 * 16 * 16] = {
      13717, 14633, 13393, 15273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14219, 14977, 15129, 15049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15185, 14727, 14121, 13586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      10579, 15226, 15260, 11991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15078, 14415, 14178, 15075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12726, 14277, 10874, 9451,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12911, 11791, 15013, 12924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15180, 13784, 7774,  15348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14477, 14247, 14523, 15246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14223, 14805, 14335, 12387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      9019,  15012, 15220, 15254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11593, 13539, 14436, 14677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12538, 13629, 15131, 14448, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13915, 12483, 14604, 7842,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14802, 14612, 15327, 12582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13820, 14096, 12041, 15051, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14481, 14387, 14791, 11639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14035, 14968, 15245, 13959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15076, 14043, 15351, 13718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14065, 11168, 14670, 13385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14415, 10126, 14327, 12871, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13278, 14263, 13842, 13420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14813, 15179, 15201, 12669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      10909, 13404, 15012, 14775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14167, 14296, 14659, 14999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      8257,  15345, 11292, 14284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14388, 14215, 14899, 13700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15117, 11280, 14407, 15226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14659, 14238, 9645,  14763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14259, 11179, 14093, 15064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14546, 10329, 14517, 11502, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11346, 14389, 15343, 13370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15305, 14455, 15170, 12374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15135, 13232, 11257, 13393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13192, 14629, 13648, 15159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14576, 13830, 14427, 14739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12837, 13978, 14633, 15185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14971, 11183, 15123, 14586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12630, 14836, 14897, 13545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14842, 14514, 14407, 12336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15142, 15291, 14817, 13495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15149, 15219, 15302, 14088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      9507,  12779, 14672, 12172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14361, 9038,  10286, 11767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11743, 14965, 14847, 14598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14362, 13553, 14834, 15149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15325, 14845, 13870, 15102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14942, 15359, 14904, 15034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      9360,  13457, 13630, 12647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13767, 15264, 13700, 12651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14721, 14055, 15035, 14461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13251, 13468, 15235, 14382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14905, 14092, 12383, 14141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15303, 12123, 14006, 14228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      15136, 13119, 14391, 14624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13095, 14981, 14994, 12624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14894, 12580, 13922, 15265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12878, 14602, 14165, 14303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      11757, 15331, 15343, 15149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13209, 11594, 15247, 14459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13118, 12868, 13982, 11374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13367, 14585, 13846, 15319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14810, 13662, 12718, 13320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14489, 12071, 13509, 15225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14608, 14576, 13899, 14718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      14972, 13522, 12321, 11909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      13750, 14365, 14762, 14729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      12767, 14197, 13849, 12160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0,     0,     0,     0,     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 2, 17, 4}, {2, 2, 2, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 2, 2, 1, 16, 16}, {2, 2, 17, 4}, DT_FLOAT16};
  TransResult result2;
  FormatTransferFractalZzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
  EXPECT_EQ(
      transfer2.TransShape(args2.src_format, args2.src_shape, args2.src_data_type, args2.dst_format, args2.dst_shape),
      UNSUPPORTED);
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape5_fp16) {
  uint16_t data[2 * 3 * 2 * 3 * 17] = {
      13832, 14161, 15182, 12654, 14878, 12188, 14405, 14401, 14635, 14215, 15223, 14238, 15133, 11718, 15331, 14338,
      15265, 15194, 15288, 13191, 14573, 14512, 14999, 13420, 12967, 14867, 13486, 14285, 11731, 15012, 15185, 14578,
      14604, 14930, 15339, 14672, 14361, 14595, 13897, 13702, 14738, 14940, 15055, 10452, 13759, 14578, 12756, 14084,
      14632, 10550, 14379, 13063, 15277, 12710, 13758, 14430, 14032, 12959, 12610, 14780, 15077, 14376, 14767, 14531,
      12999, 14750, 14625, 14733, 13516, 14989, 14483, 13888, 14280, 14438, 15054, 14699, 11164, 14506, 9849,  14973,
      14036, 12835, 14942, 15314, 11479, 14805, 13564, 14216, 14489, 12263, 12317, 14394, 15330, 14865, 15101, 13487,
      14978, 14717, 14730, 9234,  14369, 12551, 13386, 14797, 15142, 14638, 13065, 14524, 14501, 14516, 15074, 9012,
      14343, 11870, 15004, 14822, 13897, 13746, 14365, 12776, 13974, 11111, 14798, 14519, 11743, 13554, 15174, 14761,
      13111, 15119, 13462, 13807, 13867, 13672, 8661,  14533, 12666, 12279, 13297, 14739, 13949, 14644, 15039, 14740,
      14543, 15101, 14416, 13802, 13635, 14776, 14331, 14353, 14947, 14299, 12744, 15291, 14536, 11738, 14455, 15308,
      15266, 13019, 13572, 11926, 15082, 14224, 9462,  13668, 14824, 12329, 12870, 14772, 14834, 11708, 15172, 14120,
      13451, 15360, 13950, 13965, 13200, 10682, 13446, 13298, 15052, 14316, 13322, 15079, 14510, 15047, 15209, 12569,
      14585, 14428, 11620, 14371, 15045, 14808, 14919, 14586, 14743, 14510, 12366, 12928, 14632, 13414, 13375, 14798,
      13449, 13741, 14342, 15150, 14384, 15197, 14590, 13859, 14973, 15093, 13743, 12435, 15349, 15007, 12547, 15053,
      14896, 15134, 14397, 14418, 13524, 14763, 13316, 12556, 15102, 15036, 12881, 13259, 14450, 14956, 13726, 12271,
      14861, 12837, 14857, 13393, 13747, 14731, 14557, 10441, 15208, 12014, 14473, 14014, 13970, 13328, 15348, 15291,
      15250, 13773, 14774, 14388, 14110, 12128, 13446, 13528, 13884, 11343, 15344, 15110, 13023, 11379, 10818, 14879,
      13726, 14487, 15089, 14818, 15154, 14075, 15287, 14476, 14361, 14792, 14905, 14017, 14056, 12394, 14860, 14831,
      15246, 9459,  14900, 14641, 11659, 15087, 15043, 12976, 15048, 14800, 14994, 15204, 9229,  14139, 12185, 15170,
      11514, 14916, 14476, 9861,  14664, 13726, 13386, 15268, 14659, 15240, 14942, 15287, 14214, 15340, 12256, 12964,
      12739, 14755, 14766, 13935, 11940, 12670, 14601, 11843, 14484, 15131, 14896, 14675, 15174, 10600, 13778, 12872,
      11877, 14065, 12621, 14708, 15078, 15146, 12562, 15177, 14771, 14191, 15296, 14136, 14995, 14103, 14462, 13363,
      14599, 15154, 14747, 11554, 15275, 14737, 14484, 11567, 12337, 11946, 15254, 11493, 14168, 14868, 15090, 13811,
      14064, 14996, 15243, 14645, 15240, 14774, 13726, 12929, 14818, 14524, 13709, 14709, 12375, 14916, 13434, 14960,
      13966, 14502, 14232, 15030, 15145, 15174, 13891, 13952, 14401, 12912, 13329, 15200, 14691, 13676, 14057, 11970,
      15359, 14434, 14461, 14734, 14446, 14236, 12909, 13688, 8230,  14875, 15305, 13715, 14729, 13571, 14578, 13491,
      15049, 12556, 14350, 14044, 13558, 14617, 13512, 15214, 14461, 11904, 14929, 14996, 13421, 14285, 12716, 13199,
      14107, 13368, 15012, 15150, 13428, 13113, 12456, 14275, 14909, 13438, 14050, 13672, 14489, 11595, 14776, 14038,
      14285, 12346, 13721, 12983, 13332, 14940, 13479, 14683, 13765, 15125, 13420, 14035, 9788,  15254, 15200, 14645,
      13748, 14510, 15293, 14706, 14444, 14586, 14786, 10598, 14997, 14358, 15144, 13528, 7493,  10094, 11973, 12700,
      14358, 12935, 12858, 14628, 13953, 13500, 14436, 14342, 15329, 14811, 11681, 13516, 12939, 15358, 12927, 14526,
      8919,  9601,  15163, 12303, 9854,  14850, 14704, 14548, 12500, 13563, 14251, 14267, 14862, 14164, 14370, 13450,
      14482, 14247, 13076, 14777, 13678, 12668, 14488, 8794,  13883, 13602, 10705, 12641, 13569, 13477, 15042, 15269,
      14449, 14489, 14341, 14127, 14554, 11366, 15130, 13479, 13384, 14574, 11501, 9470,  15122, 14179, 14480, 13224,
      12376, 14420, 14469, 14920, 12054, 7632,  14994, 13384, 11545, 15233, 14744, 14554, 14136, 13251, 14072, 13863,
      13176, 12532, 11110, 15262, 14771, 15191, 14622, 14752, 12759, 15150, 14699, 14797, 13573, 13782, 12854, 14870,
      13485, 15242, 14253, 14472, 14578, 14140, 12008, 14335, 11901, 14540, 14607, 15197, 13362, 14992, 14699, 14469,
      15065, 14702, 15180, 12374, 11178, 14562, 14063, 14387, 14358, 12712, 14251, 15251, 14755, 10911, 14955, 14890,
      15255, 12943, 14027, 14621,
  };
  uint16_t ret[2 * 3 * 2 * 1 * 2 * 16 * 16] = {
      13832, 14161, 15182, 12654, 14878, 12188, 14405, 14401, 14635, 14215, 15223, 14238, 15133, 11718, 15331, 14338,
      15194, 15288, 13191, 14573, 14512, 14999, 13420, 12967, 14867, 13486, 14285, 11731, 15012, 15185, 14578, 14604,
      15339, 14672, 14361, 14595, 13897, 13702, 14738, 14940, 15055, 10452, 13759, 14578, 12756, 14084, 14632, 10550,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15265, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14930, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14379, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13063, 15277, 12710, 13758, 14430, 14032, 12959, 12610, 14780, 15077, 14376, 14767, 14531, 12999, 14750, 14625,
      13516, 14989, 14483, 13888, 14280, 14438, 15054, 14699, 11164, 14506, 9849,  14973, 14036, 12835, 14942, 15314,
      14805, 13564, 14216, 14489, 12263, 12317, 14394, 15330, 14865, 15101, 13487, 14978, 14717, 14730, 9234,  14369,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14733, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      11479, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12551, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13386, 14797, 15142, 14638, 13065, 14524, 14501, 14516, 15074, 9012,  14343, 11870, 15004, 14822, 13897, 13746,
      12776, 13974, 11111, 14798, 14519, 11743, 13554, 15174, 14761, 13111, 15119, 13462, 13807, 13867, 13672, 8661,
      12666, 12279, 13297, 14739, 13949, 14644, 15039, 14740, 14543, 15101, 14416, 13802, 13635, 14776, 14331, 14353,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14365, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14533, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14947, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14299, 12744, 15291, 14536, 11738, 14455, 15308, 15266, 13019, 13572, 11926, 15082, 14224, 9462,  13668, 14824,
      12870, 14772, 14834, 11708, 15172, 14120, 13451, 15360, 13950, 13965, 13200, 10682, 13446, 13298, 15052, 14316,
      15079, 14510, 15047, 15209, 12569, 14585, 14428, 11620, 14371, 15045, 14808, 14919, 14586, 14743, 14510, 12366,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12329, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13322, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12928, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14632, 13414, 13375, 14798, 13449, 13741, 14342, 15150, 14384, 15197, 14590, 13859, 14973, 15093, 13743, 12435,
      15007, 12547, 15053, 14896, 15134, 14397, 14418, 13524, 14763, 13316, 12556, 15102, 15036, 12881, 13259, 14450,
      13726, 12271, 14861, 12837, 14857, 13393, 13747, 14731, 14557, 10441, 15208, 12014, 14473, 14014, 13970, 13328,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15349, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14956, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15348, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15291, 15250, 13773, 14774, 14388, 14110, 12128, 13446, 13528, 13884, 11343, 15344, 15110, 13023, 11379, 10818,
      13726, 14487, 15089, 14818, 15154, 14075, 15287, 14476, 14361, 14792, 14905, 14017, 14056, 12394, 14860, 14831,
      9459,  14900, 14641, 11659, 15087, 15043, 12976, 15048, 14800, 14994, 15204, 9229,  14139, 12185, 15170, 11514,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14879, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15246, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14916, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14476, 9861,  14664, 13726, 13386, 15268, 14659, 15240, 14942, 15287, 14214, 15340, 12256, 12964, 12739, 14755,
      13935, 11940, 12670, 14601, 11843, 14484, 15131, 14896, 14675, 15174, 10600, 13778, 12872, 11877, 14065, 12621,
      15078, 15146, 12562, 15177, 14771, 14191, 15296, 14136, 14995, 14103, 14462, 13363, 14599, 15154, 14747, 11554,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14766, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14708, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15275, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14737, 14484, 11567, 12337, 11946, 15254, 11493, 14168, 14868, 15090, 13811, 14064, 14996, 15243, 14645, 15240,
      13726, 12929, 14818, 14524, 13709, 14709, 12375, 14916, 13434, 14960, 13966, 14502, 14232, 15030, 15145, 15174,
      13952, 14401, 12912, 13329, 15200, 14691, 13676, 14057, 11970, 15359, 14434, 14461, 14734, 14446, 14236, 12909,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14774, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13891, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13688, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      8230,  14875, 15305, 13715, 14729, 13571, 14578, 13491, 15049, 12556, 14350, 14044, 13558, 14617, 13512, 15214,
      11904, 14929, 14996, 13421, 14285, 12716, 13199, 14107, 13368, 15012, 15150, 13428, 13113, 12456, 14275, 14909,
      14050, 13672, 14489, 11595, 14776, 14038, 14285, 12346, 13721, 12983, 13332, 14940, 13479, 14683, 13765, 15125,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14461, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13438, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13420, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14035, 9788,  15254, 15200, 14645, 13748, 14510, 15293, 14706, 14444, 14586, 14786, 10598, 14997, 14358, 15144,
      7493,  10094, 11973, 12700, 14358, 12935, 12858, 14628, 13953, 13500, 14436, 14342, 15329, 14811, 11681, 13516,
      15358, 12927, 14526, 8919,  9601,  15163, 12303, 9854,  14850, 14704, 14548, 12500, 13563, 14251, 14267, 14862,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13528, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12939, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14164, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14370, 13450, 14482, 14247, 13076, 14777, 13678, 12668, 14488, 8794,  13883, 13602, 10705, 12641, 13569, 13477,
      15269, 14449, 14489, 14341, 14127, 14554, 11366, 15130, 13479, 13384, 14574, 11501, 9470,  15122, 14179, 14480,
      12376, 14420, 14469, 14920, 12054, 7632,  14994, 13384, 11545, 15233, 14744, 14554, 14136, 13251, 14072, 13863,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15042, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13224, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      13176, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      12532, 11110, 15262, 14771, 15191, 14622, 14752, 12759, 15150, 14699, 14797, 13573, 13782, 12854, 14870, 13485,
      14253, 14472, 14578, 14140, 12008, 14335, 11901, 14540, 14607, 15197, 13362, 14992, 14699, 14469, 15065, 14702,
      12374, 11178, 14562, 14063, 14387, 14358, 12712, 14251, 15251, 14755, 10911, 14955, 14890, 15255, 12943, 14027,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15242, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      15180, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      14621, 0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  };

  TransArgs args{reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 3, 2, 3, 17},
                 {2, 3, 2, 1, 2, 16, 16},           DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 2);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND,
                  {2, 3, 2, 1, 2, 16, 16},          {2, 3, 2, 3, 17},  DT_FLOAT16};
  TransResult result2;
  FormatTransferFractalZzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 2);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<uint16_t *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nd_shape4_fp32) {
  float data[2 * 2 * 4 * 17] = {
      0.48734783127746584,   0.15190233146679444,   0.6309953031435181,   0.6571782855267494,  0.18640007179772766,
      0.8708466062957234,    0.8354796070795485,    0.5937101170057715,   0.20286466757490806, 0.7236210224379754,
      0.5133016305159891,    0.30759221385705016,   0.8034168117461314,   0.8396583387580794,  0.6499070393851767,
      0.8144802952530074,    0.5948098768034782,    0.5950270148901504,   0.06571103810980217, 0.04113537524070798,
      0.850404641124823,     0.9948419071548489,    0.6215161021063617,   0.16249192772658316, 0.5050913431975846,
      0.7937775887578682,    0.028831707551000396,  0.28325013514723507,  0.8211410723546999,  0.7176669570041827,
      0.6588421729934614,    0.16841110318562091,   0.7095162395962725,   0.39576308638615343, 0.10528222016675215,
      0.43028024321798863,   0.044868717722925666,  0.8408329229287285,   0.931315710167798,   0.5383338657309856,
      0.7474342292121668,    0.6531557890786839,    0.7071920439731455,   0.10085996724687896, 0.21146039946088158,
      0.3211131278764192,    0.921636927547933,     0.9981429184367644,   0.09662709007192716, 0.4734277260159877,
      0.835128648845281,     0.9867914228220531,    0.4415437181821612,   0.45416217225683975, 0.27983653489892013,
      0.7609050274817578,    0.23017630407947565,   0.7702388069981185,   0.2477211058028833,  0.8261031804962897,
      0.4877356097679747,    0.8602972626219345,    0.7063671926943388,   0.4048930504139826,  0.7880778896294389,
      0.5829037833793927,    0.6209757776523838,    0.6085773554247663,   0.4679223140485166,  0.027438781009462065,
      0.3716878195231198,    0.0199579978088682,    0.36102038094904887,  0.6431222830463951,  0.34741587153320386,
      0.22603314514462725,   0.5067781241362863,    0.8342422249794591,   0.26646178333204906, 0.6759305818665823,
      0.6690347797724682,    0.7929141594499515,    0.4097471168728528,   0.9675174260723787,  0.3525636088638997,
      0.8824227903662591,    0.004340246025094863,  0.5813145980752394,   0.5704711233756934,  0.8954523668644979,
      0.6484554011109014,    0.17555592535956188,   0.5157569568469266,   0.8812349707210847,  0.812251544084032,
      0.8656711072891791,    0.8172850573004784,    0.5949828072747959,   0.9049741100221382,  0.8879859467554044,
      0.8313146429660512,    0.0457129718803142,    0.4065258282791677,   0.15727897761125864, 0.3484205075303167,
      0.20316484509187538,   0.040710637233631664,  0.9422636673185534,   0.0668039513759997,  0.5166874092345884,
      0.28992632700217513,   0.45448621751855833,   0.8428703807764792,   0.8095396267374237,  0.9405578679861039,
      0.6690338086676076,    0.6856661561482512,    0.509377133767494,    0.18949568385264326, 0.746092919110688,
      0.718560590882892,     0.19987548889823148,   0.5985766244393099,   0.3892282635563432,  0.042174527314988386,
      0.28834424048937324,   0.5647006422391396,    0.10768865385191584,  0.6680480168326073,  0.48502265172153936,
      0.20107347266422226,   0.06700154189232066,   0.2583110319336359,   0.14494240789279178, 0.214153857788978,
      0.9730538073350009,    0.7358124562940163,    0.9023289319229876,   0.5584131484343305,  0.7165017329880333,
      0.5698554353567142,    0.8659927309025036,    0.4755112121320433,   0.3580491896897282,  0.7820043061394484,
      0.3875849451386024,    0.6442406157037353,    0.9250353474149741,   0.8698903846139167,  0.25516670302899325,
      0.34742866403193917,   0.5540345282385027,    0.1249381619067389,   0.6511396228200564,  0.0518584845004707,
      0.47687327587566675,   0.7391090941667979,    0.050741858095834425, 0.3565270757329517,  0.42851750996605265,
      0.5294163914194764,    0.7398537176473816,    0.9078831020615753,   0.1572735298694834,  0.09459429130511421,
      0.3617954816433758,    0.3029217652293019,    0.5997775212822984,   0.248580737678893,   0.9543674249350337,
      0.954451145757734,     0.1962316838207071,    0.6745526891253325,   0.88651822532634,    0.9624023505476093,
      0.8682513367267045,    0.5281261201765712,    0.15965941469601175,  0.4441328893966944,  0.2923804418476723,
      0.06490779221949527,   0.0017403590798413804, 0.8520009823265204,   0.44971843937991374, 0.3386034163640277,
      0.7702096738809434,    0.7334994568530535,    0.8830585641425194,   0.6618970151878655,  0.4848376040578781,
      0.5049250727515491,    0.5785873080885714,    0.9952698162199863,   0.43430072374659,    0.6188847870072389,
      0.7581591778750364,    0.6383739016829548,    0.7567651057215206,   0.7513738640734398,  0.49253050728145975,
      0.8139147833902005,    0.14316930311349307,   0.5945922505817162,   0.6035610085176568,  0.9930256611842178,
      0.5403654583619014,    0.8979267433404176,    0.28173125276394995,  0.3467577704282401,  0.23380875880551844,
      0.7134712817327136,    0.7883287163765654,    0.7846645621192855,   0.3189860693282949,  0.8804937197162858,
      0.7337066619168504,    0.37284629923791457,   0.3537077448212921,   0.16015819664911035, 0.555665025454486,
      0.27860376850661894,   0.8312480037258619,    0.19232821858251292,  0.9001473519318394,  0.5047301751313313,
      0.38814468343949315,   0.39857403311434425,   0.1371117310249017,   0.6115736287886191,  0.3291784075711639,
      0.0050888243214743945, 0.28200919754529385,   0.757181510166513,    0.3924420485744937,  0.3675296019027998,
      0.5701179208189977,    0.11717175159145532,   0.8646010844866165,   0.32028644383186755, 0.7555585921315293,
      0.8421362025797383,    0.014565912419013505,  0.1192955679481531,   0.19321039675423968, 0.2792456334803882,
      0.6943539216498176,    0.22242515779974714,   0.0312889230468939,   0.5201858645943402,  0.3820715745426422,
      0.915240687220273,     0.5018375488170763,    0.4544010301976812,   0.10290809465603667, 0.9988616579631764,
      0.4639631681412365,    0.36800589920527194,   0.02608047026799898,  0.3907130363579898,  0.22964761662220634,
      0.36479183564369644,   0.8837663008817578,    0.8767224380658272,   0.09642232491729474, 0.37809846987796636,
      0.8852159908183284,    0.30341830122754354,   0.7551325894584977,   0.5477351512879798,  0.05477218246488447,
      0.5564337547416925,    0.8988484613080273,
  };
  float ret[2 * 2 * 1 * 2 * 16 * 16] = {
      0.48734783127746584,
      0.15190233146679444,
      0.6309953031435181,
      0.6571782855267494,
      0.18640007179772766,
      0.8708466062957234,
      0.8354796070795485,
      0.5937101170057715,
      0.20286466757490806,
      0.7236210224379754,
      0.5133016305159891,
      0.30759221385705016,
      0.8034168117461314,
      0.8396583387580794,
      0.6499070393851767,
      0.8144802952530074,
      0.5950270148901504,
      0.06571103810980217,
      0.04113537524070798,
      0.850404641124823,
      0.9948419071548489,
      0.6215161021063617,
      0.16249192772658316,
      0.5050913431975846,
      0.7937775887578682,
      0.028831707551000396,
      0.28325013514723507,
      0.8211410723546999,
      0.7176669570041827,
      0.6588421729934614,
      0.16841110318562091,
      0.7095162395962725,
      0.10528222016675215,
      0.43028024321798863,
      0.044868717722925666,
      0.8408329229287285,
      0.931315710167798,
      0.5383338657309856,
      0.7474342292121668,
      0.6531557890786839,
      0.7071920439731455,
      0.10085996724687896,
      0.21146039946088158,
      0.3211131278764192,
      0.921636927547933,
      0.9981429184367644,
      0.09662709007192716,
      0.4734277260159877,
      0.9867914228220531,
      0.4415437181821612,
      0.45416217225683975,
      0.27983653489892013,
      0.7609050274817578,
      0.23017630407947565,
      0.7702388069981185,
      0.2477211058028833,
      0.8261031804962897,
      0.4877356097679747,
      0.8602972626219345,
      0.7063671926943388,
      0.4048930504139826,
      0.7880778896294389,
      0.5829037833793927,
      0.6209757776523838,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5948098768034782,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.39576308638615343,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.835128648845281,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6085773554247663,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4679223140485166,
      0.027438781009462065,
      0.3716878195231198,
      0.0199579978088682,
      0.36102038094904887,
      0.6431222830463951,
      0.34741587153320386,
      0.22603314514462725,
      0.5067781241362863,
      0.8342422249794591,
      0.26646178333204906,
      0.6759305818665823,
      0.6690347797724682,
      0.7929141594499515,
      0.4097471168728528,
      0.9675174260723787,
      0.8824227903662591,
      0.004340246025094863,
      0.5813145980752394,
      0.5704711233756934,
      0.8954523668644979,
      0.6484554011109014,
      0.17555592535956188,
      0.5157569568469266,
      0.8812349707210847,
      0.812251544084032,
      0.8656711072891791,
      0.8172850573004784,
      0.5949828072747959,
      0.9049741100221382,
      0.8879859467554044,
      0.8313146429660512,
      0.4065258282791677,
      0.15727897761125864,
      0.3484205075303167,
      0.20316484509187538,
      0.040710637233631664,
      0.9422636673185534,
      0.0668039513759997,
      0.5166874092345884,
      0.28992632700217513,
      0.45448621751855833,
      0.8428703807764792,
      0.8095396267374237,
      0.9405578679861039,
      0.6690338086676076,
      0.6856661561482512,
      0.509377133767494,
      0.746092919110688,
      0.718560590882892,
      0.19987548889823148,
      0.5985766244393099,
      0.3892282635563432,
      0.042174527314988386,
      0.28834424048937324,
      0.5647006422391396,
      0.10768865385191584,
      0.6680480168326073,
      0.48502265172153936,
      0.20107347266422226,
      0.06700154189232066,
      0.2583110319336359,
      0.14494240789279178,
      0.214153857788978,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3525636088638997,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0457129718803142,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.18949568385264326,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9730538073350009,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7358124562940163,
      0.9023289319229876,
      0.5584131484343305,
      0.7165017329880333,
      0.5698554353567142,
      0.8659927309025036,
      0.4755112121320433,
      0.3580491896897282,
      0.7820043061394484,
      0.3875849451386024,
      0.6442406157037353,
      0.9250353474149741,
      0.8698903846139167,
      0.25516670302899325,
      0.34742866403193917,
      0.5540345282385027,
      0.6511396228200564,
      0.0518584845004707,
      0.47687327587566675,
      0.7391090941667979,
      0.050741858095834425,
      0.3565270757329517,
      0.42851750996605265,
      0.5294163914194764,
      0.7398537176473816,
      0.9078831020615753,
      0.1572735298694834,
      0.09459429130511421,
      0.3617954816433758,
      0.3029217652293019,
      0.5997775212822984,
      0.248580737678893,
      0.954451145757734,
      0.1962316838207071,
      0.6745526891253325,
      0.88651822532634,
      0.9624023505476093,
      0.8682513367267045,
      0.5281261201765712,
      0.15965941469601175,
      0.4441328893966944,
      0.2923804418476723,
      0.06490779221949527,
      0.0017403590798413804,
      0.8520009823265204,
      0.44971843937991374,
      0.3386034163640277,
      0.7702096738809434,
      0.8830585641425194,
      0.6618970151878655,
      0.4848376040578781,
      0.5049250727515491,
      0.5785873080885714,
      0.9952698162199863,
      0.43430072374659,
      0.6188847870072389,
      0.7581591778750364,
      0.6383739016829548,
      0.7567651057215206,
      0.7513738640734398,
      0.49253050728145975,
      0.8139147833902005,
      0.14316930311349307,
      0.5945922505817162,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.1249381619067389,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9543674249350337,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7334994568530535,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6035610085176568,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9930256611842178,
      0.5403654583619014,
      0.8979267433404176,
      0.28173125276394995,
      0.3467577704282401,
      0.23380875880551844,
      0.7134712817327136,
      0.7883287163765654,
      0.7846645621192855,
      0.3189860693282949,
      0.8804937197162858,
      0.7337066619168504,
      0.37284629923791457,
      0.3537077448212921,
      0.16015819664911035,
      0.555665025454486,
      0.8312480037258619,
      0.19232821858251292,
      0.9001473519318394,
      0.5047301751313313,
      0.38814468343949315,
      0.39857403311434425,
      0.1371117310249017,
      0.6115736287886191,
      0.3291784075711639,
      0.0050888243214743945,
      0.28200919754529385,
      0.757181510166513,
      0.3924420485744937,
      0.3675296019027998,
      0.5701179208189977,
      0.11717175159145532,
      0.32028644383186755,
      0.7555585921315293,
      0.8421362025797383,
      0.014565912419013505,
      0.1192955679481531,
      0.19321039675423968,
      0.2792456334803882,
      0.6943539216498176,
      0.22242515779974714,
      0.0312889230468939,
      0.5201858645943402,
      0.3820715745426422,
      0.915240687220273,
      0.5018375488170763,
      0.4544010301976812,
      0.10290809465603667,
      0.4639631681412365,
      0.36800589920527194,
      0.02608047026799898,
      0.3907130363579898,
      0.22964761662220634,
      0.36479183564369644,
      0.8837663008817578,
      0.8767224380658272,
      0.09642232491729474,
      0.37809846987796636,
      0.8852159908183284,
      0.30341830122754354,
      0.7551325894584977,
      0.5477351512879798,
      0.05477218246488447,
      0.5564337547416925,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.27860376850661894,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8646010844866165,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9988616579631764,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8988484613080273,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_ND, FORMAT_FRACTAL_ZZ, {2, 2, 4, 17}, {2, 2, 1, 2, 16, 16}, DT_FLOAT};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_ND, {2, 2, 1, 2, 16, 16}, {2, 2, 4, 17}, DT_FLOAT};
  TransResult result2;
  FormatTransferFractalZzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nchw_fp32) {
  float data[1 * 2 * 4 * 17] = {
      0.48354565998830756,  0.5288379191643942,   0.6564947180129607,   0.7340645053567824,  0.38024908879386665,
      0.21585634536453502,  0.07072412555001373,  0.3895052227714314,   0.6943410020138906,  0.25354216910391947,
      0.12426328263652953,  0.4029102597944607,   0.3372883475188658,   0.15188057276427525, 0.5012013044152124,
      0.2517370960382155,   0.171046514195472,    0.030114607358494028, 0.6244909419097497,  0.35110098875166074,
      0.5870767726787481,   0.4984577853475606,   0.8268546800139805,   0.33992771536906896, 0.6460327104116448,
      0.9313283133633905,   0.2989738630411848,   0.2738679126057951,   0.06777160291006379, 0.4087307988402077,
      0.46439703610597116,  0.16710550387532463,  0.6145733123000938,   0.6662604590567247,  0.9305072712135973,
      0.8323094426588402,   0.898281245473632,    0.6976122377419587,   0.20317433978716226, 0.14557923584209076,
      0.36832234829498045,  0.9415737658692604,   0.816288063336007,    0.7422170145942777,  0.19178381426007074,
      0.20831566936693735,  0.5544509915059798,   0.36345356512424987,  0.19945926108107215, 0.45935424005820946,
      0.7679089618456956,   0.8404241327512916,   0.14812383323193712,  0.30500408542184043, 0.6568831766890362,
      0.6926143461584111,   0.5399882410175864,   0.1892429432304602,   0.07467176864247294, 0.39941943666029067,
      0.2853795635416202,   0.4533368695021506,   0.6172309334055194,   0.9181934347544681,  0.04114781094262976,
      0.19628237211682176,  0.2992459720151508,   0.8065474976443873,   0.43556366882268016, 0.29680994009755635,
      0.027028192513735783, 0.1333937532467585,   0.7057053295919739,   0.26552163258627426, 0.18921931005168524,
      0.24298428082662826,  0.002365124316292211, 0.14448627328010977,  0.22643484261451152, 0.5302073755142979,
      0.9383674394413312,   0.9285339529978078,   0.33604609763869764,  0.9591323699000807,  0.4758520057631518,
      0.5724188248299613,   0.08772714551221295,  0.327875416428662,    0.7661605531724149,  0.5610963691380759,
      0.5663803171694582,   0.96865287455917,     0.7105003163177777,   0.17674291676252174, 0.4553989259943879,
      0.06394523733703428,  0.47436999492415177,  0.317587265492125,    0.6702452379659213,  0.23264947092844812,
      0.9535389507438575,   0.13653273271434707,  0.8550107222862715,   0.9171716650149612,  0.33036188965071134,
      0.5093434924862221,   0.9127693374642095,   0.15948127768481335,  0.9385875661217681,  0.47327218726414644,
      0.562557864399026,    0.5094836574054532,   0.39525315162429187,  0.39044442327833495, 0.42354272355881273,
      0.630368716154984,    0.5294499358806938,   0.18840958534702223,  0.9116004700132844,  0.217051263222375,
      0.3355053440865866,   0.7249031228856988,   0.11569833736241464,  0.17220924930082948, 0.6841828482580393,
      0.6451877670507526,   0.9960171769322085,   0.22836997946145943,  0.8876738074952507,  0.9036808362741429,
      0.3386767083756137,   0.7215167652596821,   0.7222152655225196,   0.5268864163210882,  0.5220848656018956,
      0.5033325975056796,
  };
  float ret[1 * 2 * 1 * 2 * 16 * 16] = {
      0.48354565998830756,
      0.5288379191643942,
      0.6564947180129607,
      0.7340645053567824,
      0.38024908879386665,
      0.21585634536453502,
      0.07072412555001373,
      0.3895052227714314,
      0.6943410020138906,
      0.25354216910391947,
      0.12426328263652953,
      0.4029102597944607,
      0.3372883475188658,
      0.15188057276427525,
      0.5012013044152124,
      0.2517370960382155,
      0.030114607358494028,
      0.6244909419097497,
      0.35110098875166074,
      0.5870767726787481,
      0.4984577853475606,
      0.8268546800139805,
      0.33992771536906896,
      0.6460327104116448,
      0.9313283133633905,
      0.2989738630411848,
      0.2738679126057951,
      0.06777160291006379,
      0.4087307988402077,
      0.46439703610597116,
      0.16710550387532463,
      0.6145733123000938,
      0.9305072712135973,
      0.8323094426588402,
      0.898281245473632,
      0.6976122377419587,
      0.20317433978716226,
      0.14557923584209076,
      0.36832234829498045,
      0.9415737658692604,
      0.816288063336007,
      0.7422170145942777,
      0.19178381426007074,
      0.20831566936693735,
      0.5544509915059798,
      0.36345356512424987,
      0.19945926108107215,
      0.45935424005820946,
      0.8404241327512916,
      0.14812383323193712,
      0.30500408542184043,
      0.6568831766890362,
      0.6926143461584111,
      0.5399882410175864,
      0.1892429432304602,
      0.07467176864247294,
      0.39941943666029067,
      0.2853795635416202,
      0.4533368695021506,
      0.6172309334055194,
      0.9181934347544681,
      0.04114781094262976,
      0.19628237211682176,
      0.2992459720151508,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.171046514195472,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6662604590567247,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7679089618456956,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8065474976443873,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.43556366882268016,
      0.29680994009755635,
      0.027028192513735783,
      0.1333937532467585,
      0.7057053295919739,
      0.26552163258627426,
      0.18921931005168524,
      0.24298428082662826,
      0.002365124316292211,
      0.14448627328010977,
      0.22643484261451152,
      0.5302073755142979,
      0.9383674394413312,
      0.9285339529978078,
      0.33604609763869764,
      0.9591323699000807,
      0.5724188248299613,
      0.08772714551221295,
      0.327875416428662,
      0.7661605531724149,
      0.5610963691380759,
      0.5663803171694582,
      0.96865287455917,
      0.7105003163177777,
      0.17674291676252174,
      0.4553989259943879,
      0.06394523733703428,
      0.47436999492415177,
      0.317587265492125,
      0.6702452379659213,
      0.23264947092844812,
      0.9535389507438575,
      0.8550107222862715,
      0.9171716650149612,
      0.33036188965071134,
      0.5093434924862221,
      0.9127693374642095,
      0.15948127768481335,
      0.9385875661217681,
      0.47327218726414644,
      0.562557864399026,
      0.5094836574054532,
      0.39525315162429187,
      0.39044442327833495,
      0.42354272355881273,
      0.630368716154984,
      0.5294499358806938,
      0.18840958534702223,
      0.217051263222375,
      0.3355053440865866,
      0.7249031228856988,
      0.11569833736241464,
      0.17220924930082948,
      0.6841828482580393,
      0.6451877670507526,
      0.9960171769322085,
      0.22836997946145943,
      0.8876738074952507,
      0.9036808362741429,
      0.3386767083756137,
      0.7215167652596821,
      0.7222152655225196,
      0.5268864163210882,
      0.5220848656018956,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4758520057631518,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.13653273271434707,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9116004700132844,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5033325975056796,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NCHW, FORMAT_FRACTAL_ZZ, {1, 2, 4, 17}, {1, 2, 1, 2, 16, 16}, DT_FLOAT};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_NCHW, {1, 2, 1, 2, 16, 16}, {1, 2, 4, 17}, DT_FLOAT};
  TransResult result2;
  FormatTransferFractalZzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, nhwc_fp32) {
  float data[2 * 2 * 17 * 4] = {
      0.6826642868668084,   0.043866050762608744, 0.17666253295970225, 0.6377947294887623,   0.5731253161317631,
      0.8660479153259933,   0.3283955922096047,   0.28822941576304395, 0.266035796785115,    0.2668960688194587,
      0.13558803601784464,  0.014302374775957749, 0.22218488108454748, 0.5502228577797044,   0.8537365635590441,
      0.3449278734931246,   0.7079460210099658,   0.32166794924574393, 0.6016995473528488,   0.5155731631574363,
      0.4350255443350567,   0.15194948171848122,  0.17060018740751715, 0.5585688800367302,   0.5106144168384212,
      0.7774792500405002,   0.9166771685022536,   0.1520171589804501,  0.055349159562811945, 0.08597516811763906,
      0.8318337876627744,   0.8013703637699361,   0.4567924562463306,  0.236971745638061,    0.8091749658245033,
      0.3048528694425596,   0.8440505279254544,   0.4565011814466987,  0.8444823800442499,   0.2665125487284098,
      0.7942646379904031,   0.3003394430517031,   0.6060659316793948,  0.27949558854026524,  0.22970861575053936,
      0.39464357988879895,  0.6323358476347488,   0.4900446166203536,  0.4262678398449171,   0.5175669011162926,
      0.8074101200638781,   0.46309351804139254,  0.38526259936740015, 0.9475081441242449,   0.8026773601813839,
      0.06648433150135313,  0.33054450113462375,  0.16206263925129671, 0.014661402248451694, 0.665996111688725,
      0.49445514708553606,  0.1970970197451115,   0.932784874403773,   0.8203255119427988,   0.8368935109284026,
      0.16366406201739148,  0.24295756148468395,  0.5998796055465441,  0.8329503908566426,   0.6233943209050588,
      0.5485288788944125,   0.4936593563676702,   0.6353616329318031,  0.1622857757417404,   0.9106806866582022,
      0.6660538060703398,   0.7791820943318373,   0.1706647725627367,  0.6381242174232316,   0.5563114541831535,
      0.34546090886259295,  0.6183240367763264,   0.35075893676319736, 0.7802417875294433,   0.9353130445205744,
      0.26121944223135474,  0.5879440609405164,   0.14403352098963806, 0.9478402093648892,   0.1091812289297438,
      0.6835183818698114,   0.5384651415019075,   0.3727099433058595,  0.07027289982611373,  0.24479654654168947,
      0.6340807114324638,   0.1089351825903393,   0.4261205290528358,  0.788035046472595,    0.1669274692010293,
      0.7891031034793119,   0.30903585028517444,  0.44496600737518255, 0.17917072427208325,  0.8400527538813541,
      0.871910504463008,    0.38573905907087824,  0.10475763959813045, 0.6067697302192192,   0.3664373646929884,
      0.8540231355708695,   0.7361917987131372,   0.04323780187994608, 0.4571086189944381,   0.5232490913448236,
      0.2034034806401901,   0.35033687234667865,  0.4983408469170202,  0.06750931495858226,  0.15379622192977516,
      0.43307977818364696,  0.1349960580625169,   0.5823669234697881,  0.5317808621747713,   0.22318251516739263,
      0.49734566581161355,  0.011911822059888721, 0.9508092497909877,  0.904895935832329,    0.9258062283860066,
      0.27726879265908166,  0.5614587634330378,   0.4836523068545914,  0.2276530565354099,   0.4634085711120596,
      0.22179062615921818,  0.6018307008437298,   0.40590069858881495, 0.5126780415762812,   0.6465924460988698,
      0.2605000666954156,   0.11171926959828349,  0.6105601403074952,  0.5534360444770465,   0.8109441285089057,
      0.587338599177806,    0.20351854196971497,  0.3698354775123749,  0.3381739805155217,   0.8338993543749309,
      0.5934550069127651,   0.3500320504998983,   0.44079385400682924, 0.6233180976082278,   0.46480077933911323,
      0.34927091073628136,  0.4187070529833151,   0.7423954257982627,  0.38881437522154527,  0.7714112671689478,
      0.8179509335133315,   0.3831078838732509,   0.5079490533023165,  0.03606601875029403,  0.04250359963248451,
      0.12750451249951045,  0.9971879993139143,   0.05829183629354873, 0.3265538538455145,   0.7778408294948845,
      0.044318813495665244, 0.31281482741835165,  0.8394089943853243,  0.9311574975953711,   0.4945645162287725,
      0.3126359293664953,   0.7723066998764473,   0.30410825487593607, 0.899894640728656,    0.6467261185695091,
      0.6538998794010177,   0.21853150677202715,  0.5021502873311521,  0.9431876774620246,   0.477918638219775,
      0.633568735592873,    0.5180803503595832,   0.9533087354778479,  0.7385933023116928,   0.5938150594439631,
      0.8502221479425777,   0.13090966344672805,  0.15291414392453007, 0.329710111032374,    0.3905939714054877,
      0.45771800705289356,  0.6192100451790177,   0.5126529214276997,  0.8229108192573972,   0.73202196858338,
      0.4785584310461053,   0.8823363509107982,   0.3792618584525941,  0.1591318008380328,   0.8922797495718489,
      0.41579350628761014,  0.6755235112503503,   0.9742082066104254,  0.719115743910399,    0.3112817152639481,
      0.7897030377170158,   0.3120282966936694,   0.3362586043272986,  0.33468051317300296,  0.32925703998421263,
      0.5022858273437679,   0.8307640088142761,   0.454233538180681,   0.493034504851536,    0.6675154014187731,
      0.6084033780738657,   0.39712687614397224,  0.46986115672066886, 0.50569748391499,     0.011927554221092929,
      0.7665958947310153,   0.2096478710154812,   0.8348997760875302,  0.9346732345703666,   0.7366480312487773,
      0.9447711246630602,   0.13470562438257616,  0.7036874707129143,  0.6739655054223922,   0.8441899947297865,
      0.1048650889727486,   0.9958266923005692,   0.22846263420411372, 0.3116180316667533,   0.8696545362199898,
      0.623634518307979,    0.4372726660035817,   0.7072767829114394,  0.36685317131241946,  0.6113192123495405,
      0.5403136926716755,   0.7969503412555408,   0.8976391022871576,  0.6904457546606565,   0.256293407218113,
      0.12407625950806878,  0.8932902373278819,   0.12956469654646197, 0.889619024273833,    0.009357463204375138,
      0.2117754631989739,   0.8874412877293805,   0.27088254423859315, 0.46310127400524936,  0.31001925997527413,
      0.6263861695214231,   0.8998318442583092,   0.5619257152280644,  0.09296453039644181,  0.5991036267324175,
      0.5085470750797965,   0.49798421993443254,  0.4492691325524484,  0.19410472899785058,  0.3865163021583399,
      0.49187965812508505,  0.5724473984180373,
  };
  float ret[2 * 2 * 2 * 1 * 16 * 16] = {
      0.6826642868668084,
      0.043866050762608744,
      0.17666253295970225,
      0.6377947294887623,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5731253161317631,
      0.8660479153259933,
      0.3283955922096047,
      0.28822941576304395,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.266035796785115,
      0.2668960688194587,
      0.13558803601784464,
      0.014302374775957749,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.22218488108454748,
      0.5502228577797044,
      0.8537365635590441,
      0.3449278734931246,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7079460210099658,
      0.32166794924574393,
      0.6016995473528488,
      0.5155731631574363,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4350255443350567,
      0.15194948171848122,
      0.17060018740751715,
      0.5585688800367302,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5106144168384212,
      0.7774792500405002,
      0.9166771685022536,
      0.1520171589804501,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.055349159562811945,
      0.08597516811763906,
      0.8318337876627744,
      0.8013703637699361,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4567924562463306,
      0.236971745638061,
      0.8091749658245033,
      0.3048528694425596,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8440505279254544,
      0.4565011814466987,
      0.8444823800442499,
      0.2665125487284098,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7942646379904031,
      0.3003394430517031,
      0.6060659316793948,
      0.27949558854026524,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.22970861575053936,
      0.39464357988879895,
      0.6323358476347488,
      0.4900446166203536,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4262678398449171,
      0.5175669011162926,
      0.8074101200638781,
      0.46309351804139254,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.38526259936740015,
      0.9475081441242449,
      0.8026773601813839,
      0.06648433150135313,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.33054450113462375,
      0.16206263925129671,
      0.014661402248451694,
      0.665996111688725,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.49445514708553606,
      0.1970970197451115,
      0.932784874403773,
      0.8203255119427988,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8368935109284026,
      0.16366406201739148,
      0.24295756148468395,
      0.5998796055465441,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8329503908566426,
      0.6233943209050588,
      0.5485288788944125,
      0.4936593563676702,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6353616329318031,
      0.1622857757417404,
      0.9106806866582022,
      0.6660538060703398,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7791820943318373,
      0.1706647725627367,
      0.6381242174232316,
      0.5563114541831535,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.34546090886259295,
      0.6183240367763264,
      0.35075893676319736,
      0.7802417875294433,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9353130445205744,
      0.26121944223135474,
      0.5879440609405164,
      0.14403352098963806,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9478402093648892,
      0.1091812289297438,
      0.6835183818698114,
      0.5384651415019075,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3727099433058595,
      0.07027289982611373,
      0.24479654654168947,
      0.6340807114324638,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.1089351825903393,
      0.4261205290528358,
      0.788035046472595,
      0.1669274692010293,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7891031034793119,
      0.30903585028517444,
      0.44496600737518255,
      0.17917072427208325,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8400527538813541,
      0.871910504463008,
      0.38573905907087824,
      0.10475763959813045,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6067697302192192,
      0.3664373646929884,
      0.8540231355708695,
      0.7361917987131372,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.04323780187994608,
      0.4571086189944381,
      0.5232490913448236,
      0.2034034806401901,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.35033687234667865,
      0.4983408469170202,
      0.06750931495858226,
      0.15379622192977516,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.43307977818364696,
      0.1349960580625169,
      0.5823669234697881,
      0.5317808621747713,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.22318251516739263,
      0.49734566581161355,
      0.011911822059888721,
      0.9508092497909877,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.904895935832329,
      0.9258062283860066,
      0.27726879265908166,
      0.5614587634330378,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4836523068545914,
      0.2276530565354099,
      0.4634085711120596,
      0.22179062615921818,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6018307008437298,
      0.40590069858881495,
      0.5126780415762812,
      0.6465924460988698,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.2605000666954156,
      0.11171926959828349,
      0.6105601403074952,
      0.5534360444770465,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8109441285089057,
      0.587338599177806,
      0.20351854196971497,
      0.3698354775123749,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3381739805155217,
      0.8338993543749309,
      0.5934550069127651,
      0.3500320504998983,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.44079385400682924,
      0.6233180976082278,
      0.46480077933911323,
      0.34927091073628136,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4187070529833151,
      0.7423954257982627,
      0.38881437522154527,
      0.7714112671689478,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8179509335133315,
      0.3831078838732509,
      0.5079490533023165,
      0.03606601875029403,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.04250359963248451,
      0.12750451249951045,
      0.9971879993139143,
      0.05829183629354873,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3265538538455145,
      0.7778408294948845,
      0.044318813495665244,
      0.31281482741835165,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8394089943853243,
      0.9311574975953711,
      0.4945645162287725,
      0.3126359293664953,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7723066998764473,
      0.30410825487593607,
      0.899894640728656,
      0.6467261185695091,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6538998794010177,
      0.21853150677202715,
      0.5021502873311521,
      0.9431876774620246,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.477918638219775,
      0.633568735592873,
      0.5180803503595832,
      0.9533087354778479,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7385933023116928,
      0.5938150594439631,
      0.8502221479425777,
      0.13090966344672805,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.15291414392453007,
      0.329710111032374,
      0.3905939714054877,
      0.45771800705289356,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6192100451790177,
      0.5126529214276997,
      0.8229108192573972,
      0.73202196858338,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.4785584310461053,
      0.8823363509107982,
      0.3792618584525941,
      0.1591318008380328,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8922797495718489,
      0.41579350628761014,
      0.6755235112503503,
      0.9742082066104254,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.719115743910399,
      0.3112817152639481,
      0.7897030377170158,
      0.3120282966936694,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3362586043272986,
      0.33468051317300296,
      0.32925703998421263,
      0.5022858273437679,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8307640088142761,
      0.454233538180681,
      0.493034504851536,
      0.6675154014187731,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6084033780738657,
      0.39712687614397224,
      0.46986115672066886,
      0.50569748391499,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.011927554221092929,
      0.7665958947310153,
      0.2096478710154812,
      0.8348997760875302,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9346732345703666,
      0.7366480312487773,
      0.9447711246630602,
      0.13470562438257616,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.7036874707129143,
      0.6739655054223922,
      0.8441899947297865,
      0.1048650889727486,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.9958266923005692,
      0.22846263420411372,
      0.3116180316667533,
      0.8696545362199898,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.623634518307979,
      0.4372726660035817,
      0.7072767829114394,
      0.36685317131241946,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6113192123495405,
      0.5403136926716755,
      0.7969503412555408,
      0.8976391022871576,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6904457546606565,
      0.256293407218113,
      0.12407625950806878,
      0.8932902373278819,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.12956469654646197,
      0.889619024273833,
      0.009357463204375138,
      0.2117754631989739,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.8874412877293805,
      0.27088254423859315,
      0.46310127400524936,
      0.31001925997527413,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.6263861695214231,
      0.8998318442583092,
      0.5619257152280644,
      0.09296453039644181,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.5991036267324175,
      0.5085470750797965,
      0.49798421993443254,
      0.4492691325524484,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.19410472899785058,
      0.3865163021583399,
      0.49187965812508505,
      0.5724473984180373,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
      0.0,
  };

  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {2, 2, 17, 4}, {2, 2, 2, 1, 16, 16}, DT_FLOAT};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(TransFormat(args, result), SUCCESS);
  EXPECT_EQ(result.length, sizeof(ret) / sizeof(ret[0]) * 4);
  for (int i = 0; i < sizeof(ret) / sizeof(ret[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result.data.get()))[i], ret[i]);
  }
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);

  TransArgs args2{
      reinterpret_cast<uint8_t *>(ret), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {2, 2, 2, 1, 16, 16}, {2, 2, 17, 4}, DT_FLOAT};
  TransResult result2;
  FormatTransferFractalZzND transfer2;
  EXPECT_EQ(TransFormat(args2, result2), SUCCESS);
  EXPECT_EQ(result2.length, sizeof(data) / sizeof(data[0]) * 4);
  for (int i = 0; i < sizeof(data) / sizeof(data[0]); ++i) {
    EXPECT_EQ((reinterpret_cast<float *>(result2.data.get()))[i], data[i]);
  }
}

TEST_F(UtestFormatTransferNdFractZz, invalid_src_shape) {
  uint16_t data[1 * 4 * 4 * 1] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {1, 4, 4}, {1, 1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type) {
  uint16_t data[1 * 1 * 4 * 4] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_NHWC,
                 FORMAT_FRACTAL_ZZ,
                 {
                     1,
                     1,
                     4,
                     4,
                 },
                 {1, 1, 1, 16, 16},
                 DT_UNDEFINED};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_src_format) {
  uint16_t data[1 * 1 * 4 * 4] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_HWCN,
                 FORMAT_FRACTAL_ZZ,
                 {1, 1, 4, 4},
                 {1, 1, 1, 1, 16, 16},
                 DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            PARAM_INVALID);
  EXPECT_EQ(TransFormat(args, result), UNSUPPORTED);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_dst_shape) {
  uint16_t data[1 * 1 * 4 * 4] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_NHWC, FORMAT_FRACTAL_ZZ, {1, 1, 4, 4}, {1, 1, 16, 16}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZz transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(transfer.TransShape(args.src_format, args.src_shape, args.src_data_type, args.dst_format, args.dst_shape),
            SUCCESS);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_dst_shape2) {
  uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 1, 1, 16, 16}, {1, 4, 4}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_src_data_type2) {
  uint16_t data[1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_FRACTAL_ZZ,
                 FORMAT_NHWC,
                 {1, 1, 1, 16, 16},
                 {
                     1,
                     1,
                     4,
                     4,
                 },
                 DT_UNDEFINED};
  TransResult result;
  FormatTransferFractalZzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_dst_format2) {
  uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_FRACTAL_ZZ,
                 FORMAT_HWCN,
                 {1, 1, 1, 1, 16, 16},
                 {1, 1, 4, 4},
                 DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
  EXPECT_EQ(TransFormat(args, result), UNSUPPORTED);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_src_shape2) {
  uint16_t data[1 * 1 * 1 * 1 * 16 * 16] = {0};
  TransArgs args{
      reinterpret_cast<uint8_t *>(data), FORMAT_FRACTAL_ZZ, FORMAT_NHWC, {1, 1, 16, 16}, {1, 1, 4, 4}, DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}

TEST_F(UtestFormatTransferNdFractZz, invalid_src_dst_shape_relation) {
  uint16_t data[1 * 1 * 2 * 1 * 16 * 16] = {0};
  TransArgs args{reinterpret_cast<uint8_t *>(data),
                 FORMAT_FRACTAL_ZZ,
                 FORMAT_NHWC,
                 {1, 1, 2, 1, 16, 16},
                 {1, 1, 15, 17},
                 DT_FLOAT16};
  TransResult result;
  FormatTransferFractalZzND transfer;
  EXPECT_EQ(transfer.TransFormat(args, result), PARAM_INVALID);
}
}  // namespace formats
}  // namespace ge